为什么requests.get()使用Python检索不同的HTML而不是浏览器?

时间:2014-06-01 05:32:02

标签: javascript python html web-scraping

我正在尝试从HTML表格中提取数据,但在使用requests.get()时,HTML似乎无法正确加载。相反,源代码中的一行显示为:

  

"未启用JavaScript,因此此页面可能无法正常运行。"

当我导航到Google Chrome浏览器中的页面时,HTML就会显示出来。

如何让Python脚本加载正确的HTML?

2 个答案:

答案 0 :(得分:9)

欢迎来到网络爬行的精彩世界。您遇到的问题是requests.get()只会获得浏览器在页面加载开始时收到的初始页面。但是,这不是您在浏览器中看到的页面,因为形成网页可能涉及很多:javascript函数调用,AJAX调用等。

如果您希望以编程方式获取在页面加载后在Web浏览器中单击“显示源”时看到的HTML,则需要一个真正的浏览器。这是selenium可能是一个不错的选择:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get(url)
print browser.page_source

请注意,selenium本身在locating elements方面非常强大 - 您不需要单独的HTML解析器来从页面中提取数据。

希望有所帮助。

答案 1 :(得分:0)

如果您确定必须处理JavaScript,那么webdriver可以更好地处理并节省您的生命。

from selenium.common.exceptions import NoSuchElementException
from selenium import webdriver
from time import sleep

browser = webdriver.Firefox()
browser.get("http://yourwebsite.com/html-table")
browser.find_element_by_id("some-js-triggering-elem").click()
while 1:
    try:
        browser.find_element_by_id("elem-that-makes-you-know-that-table-is-loaded")
    except NoSuchElementException:
        sleep(1)
html = browser.find_element_by_xpath("//*").get_attribute("outerHTML")
# Use PyQuery or something else to parse the html and get data from table