为什么requests.get()在Python中获取的HTML与浏览器不同?
我正在尝试从一个HTML表格中提取数据,但使用requests.get()
时,似乎HTML没有正确加载。相反,源代码中有一行显示:
"JavaScript未启用,因此此页面可能无法正常工作."
当我在谷歌浏览器中打开这个页面时,HTML看起来是正常的。
我该如何让Python脚本加载正确的HTML呢?
2 个回答
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
9
欢迎来到网络爬虫的奇妙世界。你遇到的问题是,使用 requests.get()
这个方法只能获取到浏览器在加载页面时最开始收到的那一部分内容。但这并不是你在浏览器中看到的完整页面,因为网页的形成可能涉及很多东西,比如 JavaScript 函数调用、AJAX 请求等等。
如果你想要程序化地获取到在网页加载完成后,点击浏览器中的“查看源代码”时看到的 HTML 内容,你就需要一个真正的浏览器。这时候 selenium
就是一个不错的选择:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get(url)
print browser.page_source
需要注意的是,selenium
在 定位元素 方面非常强大,你不需要额外的 HTML 解析器来从页面中提取数据。
希望这些信息对你有帮助。