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

Why is requests.get() retrieving different HTML using Python than browser?

本文关键字:检索 HTML 浏览器 get request Python 使用 为什么      更新时间:2023-09-26

我正试图从HTML表中提取数据,但在使用requests.get()时,HTML似乎没有正确加载。相反,源代码中的一行是:

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

当我在谷歌浏览器中导航到页面时,HTML显示为应有的。

我如何得到一个Python脚本加载适当的HTML?

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

如果你想以编程方式获得你在网页浏览器中点击"显示源代码"后看到的HTML,你需要一个真正的浏览器。在这里,selenium可能是一个不错的选择:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get(url)
print browser.page_source

注意,selenium本身在定位元素方面非常强大—您不需要单独的HTML解析器来从页面中提取数据。

希望对你有帮助。

如果你确定你必须处理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