Python 如何在Selenium中抓取页面HTML并跟踪下一个链接
我正试图搜刮一个网站进行研究,我被卡住了。我希望scraper读取页面源代码,并将其附加到本地HTML文件中,以便我可以在校园外分析数据。我尝试了Python 如何在Selenium中抓取页面HTML并跟踪下一个链接,python,selenium,Python,Selenium,我正试图搜刮一个网站进行研究,我被卡住了。我希望scraper读取页面源代码,并将其附加到本地HTML文件中,以便我可以在校园外分析数据。我尝试了BeautifulSoup和Scrapy,但我发现我需要使用Selenium与页面交互,以浏览我所在大学的认证系统。(我不包括该代码,因为它与我的问题无关。) 当我运行脚本时,它会导航到页面并单击链接,但它只保存第一个页面的HTML。然后,每次单击链接时,它都会复制并附加该页面的HTML 如何使用Selenium单击下一页链接,删除HTML并保存到文件
BeautifulSoup
和Scrapy
,但我发现我需要使用Selenium
与页面交互,以浏览我所在大学的认证系统。(我不包括该代码,因为它与我的问题无关。)
当我运行脚本时,它会导航到页面并单击链接,但它只保存第一个页面的HTML。然后,每次单击链接时,它都会复制并附加该页面的HTML
如何使用Selenium
单击下一页链接,删除HTML并保存到文件,直到到达最后一页
source = driver.page_source
while True:
with open("test.html", "a") as TestFile:
TestFile.write(source)
try:
driver.implicitly_wait(200)
driver.find_element_by_css_selector('li.next').click()
except AttributeError:
break
编辑:我将AttributeError添加到except,并收到以下错误
selenium.common.exceptions.StaleElementReferenceException:消息:
陈旧元素引用:元素未附加到页面文档
我的假设是我需要减慢
.click()
,这就是我最初使用隐式等待的原因,但这似乎没有起到作用。您需要将页面源代码
分配给while循环内的源代码
变量
source = driver.page_source
while True:
with open("test.html", "a") as TestFile:
TestFile.write(source)
try:
driver.implicitly_wait(200)
driver.find_element_by_css_selector('li.next').click()
source = driver.page_source
except AttributeError:
break
您需要将
页面源代码
分配给while循环中的源代码
变量
source = driver.page_source
while True:
with open("test.html", "a") as TestFile:
TestFile.write(source)
try:
driver.implicitly_wait(200)
driver.find_element_by_css_selector('li.next').click()
source = driver.page_source
except AttributeError:
break
去掉你的裸体例外,你会得到一条信息更丰富的错误消息谢谢n1c9,我在例外中添加了一个AttributeError,它给了我上面添加的错误代码:StaleElementReferenceException。页面上是否有弹出窗口或类似的内容?还是像往常一样翻到下一页?另外,
隐式等待(num)
应该在初始化webdriver时设置,但这只是一种风格。它会像往常一样翻页,直到到达第8页或第9页,然后抛出陈旧元素异常。去掉裸除,您会得到一条信息更丰富的错误消息感谢n1c9,我向except添加了一个AttributeError,它给了我上面添加的错误代码:StaleElementReferenceException。页面上是否有弹出窗口或类似的内容?还是像往常一样翻到下一页?另外,隐式等待(num)
应该在初始化webdriver时设置,但这只是一种风格。它会像往常一样翻转页面,直到到达第8页或第9页,然后抛出陈旧元素异常。谢谢!这很有帮助,但现在我在每个页面的输出中都得到了副本。例如,它输出:Page1Page1 Page1Page2Page2Page2Page2Page2Page3Page3单击“下一个链接”后,使脚本等待一段时间,然后获取页面源。正如您所建议的,我添加了一个等待,它现在似乎正在工作。谢谢,@sudharsansevaraj很高兴能帮助你!!如果这对你有帮助,那么一定要接受答案:)谢谢!这很有帮助,但现在我在每个页面的输出中都得到了副本。例如,它输出:Page1Page1 Page1Page2Page2Page2Page2Page2Page3Page3单击“下一个链接”后,使脚本等待一段时间,然后获取页面源。正如您所建议的,我添加了一个等待,它现在似乎正在工作。谢谢,@sudharsansevaraj很高兴能帮助你!!如果这对您有帮助,请确保接受以下答案:)