【发布时间】:2015-01-04 18:12:53
【问题描述】:
我正在尝试抓取网站“http://everydayhealth.com”。但是,我发现页面会动态呈现。因此,当我单击“更多”按钮时,将显示一些新消息。但是,使用 splinter 单击按钮不会让“browser.html”自动更改为当前的 html 内容。有没有办法让它获得最新的 html 源代码,使用 splinter 或 selenium?我在 splinter 中的代码如下:
import requests
from bs4 import BeautifulSoup
from splinter import Browser
browser = Browser()
browser.visit('http://everydayhealth.com')
browser.click_link_by_text("More")
print(browser.html)
根据@Louis 的回答,我将程序改写如下:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.get("http://www.everydayhealth.com")
more_xpath = '//a[@class="btn-more"]'
more_btn = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(more_xpath))
more_btn.click()
more_news_xpath = '(//a[@href="http://www.everydayhealth.com/recipe-rehab/5-herbs-and-spices-to-intensify-flavor.aspx"])[2]'
WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(more_news_xpath))
print(driver.execute_script("return document.documentElement.outerHTML;"))
driver.quit()
但是,在输出文本中,我仍然找不到更新页面中的文本。例如,当我搜索“Milk Your Friend or Foe?”时,它仍然没有返回任何内容。有什么问题?
【问题讨论】:
-
如何检查 HTML 中没有变化?例如,我在打印的 html 中看到
5 Herbs and Spices That Boost Your Health文本,并且在单击More按钮后加载。 -
@alecxe 感谢您的回复。我想我检查它的方式和你检查它的方法一样。您在打印的 html 中找到“5 种促进健康的草药和香料”的原因是因为这篇文章恰好显示在网页最顶部的缩略图中。如果您在单击按钮后检查显示的任何其他标题,例如“牛奶是您的朋友还是敌人?”,您不会找到它。
标签: python html selenium web-crawler splinter