2016-10-18 48 views
1

我试图刮研究网站,我卡住了。我希望刮板读取页面源代码,并将其附加到本地HTML文件中,以便我可以分析校外数据。我已经尝试了BeautifulSoupScrapy,但我发现我需要使用Selenium与页面进行交互以浏览我的大学的认证系统。 (我不包括那个代码,因为它与我的问题相关)。如何刮页HTML并遵循硒中的下一个链接

当我运行脚本时,它导航到页面并单击链接,但它只保存第一页的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的到和接收到的下面的错误。

selenium.common.exceptions.StaleElementReferenceException:消息: 陈旧元素参考:元素没有连接到网页文件

我的假设是,我需要放慢.click(),这是为什么我原本有隐含的等待,但似乎并没有这样做。

+0

摆脱你赤裸的,除了你会得到一个更错误提示信息 – n1c9

+0

感谢n1c9,我增加了一个AttributeError的,除了它给了我在上面添加的错误代码:StaleElementReferenceException。 – woodNUFC

+0

页面上是否有任何弹出窗口或类似内容?或者它是否正常翻转到下一页?另外,当初始化webdriver时,应该设置'implicitly_wait(num)',但这只是一种风格。 – n1c9

回答

0

您需要在while循环内指定page sourcesource变量。

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 
+0

谢谢!这有帮助,但现在我在每个页面的输出中都有重复项。例如,它输出:Page1Page1 Page1Page2Page2Page2Page3Page3 – woodNUFC

+0

点击下一个链接后,让脚本等待一段时间,然后获取页面源代码。 –

+0

我已经添加了一个等待,就像你建议的那样,它现在似乎正在工作。谢谢,@SudharsanSelvaraj – woodNUFC