Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么requests.get()使用Python检索的HTML与使用浏览器检索的HTML不同?_Javascript_Python_Html_Web Scraping - Fatal编程技术网

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

Javascript 为什么requests.get()使用Python检索的HTML与使用浏览器检索的HTML不同?,javascript,python,html,web-scraping,Javascript,Python,Html,Web Scraping,我试图从HTML表中提取数据,但在使用requests.get()时,HTML似乎没有正确加载。相反,源中的一行内容为: “未启用JavaScript,因此此页面可能无法正常运行。” 当我在Google Chrome中导航到该页面时,HTML显示为它应该显示的内容 如何获得Python脚本来加载正确的HTML?如果您确定必须处理JavaScript,webdriver将处理得更好,并挽救您的生命 from selenium.common.exceptions import NoSuchEleme

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

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

当我在Google Chrome中导航到该页面时,HTML显示为它应该显示的内容


如何获得Python脚本来加载正确的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

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

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

from selenium import webdriver

browser = webdriver.Firefox()
browser.get(url)
print browser.page_source
请注意,
selenium
本身在以下方面非常强大-从页面中提取数据不需要单独的HTML解析器


希望这能有所帮助。

它很可能检索到完全相同的HTML。只是在浏览器中,Javascript运行并隐藏这一行,或者用其他内容替换这一行。您解决了问题吗?这些答案有帮助吗?
selenium
是这种情况下需要启用JavaScript的唯一选项吗?@Dmitriyfilkovskiy没有,还有其他选项,例如:“splash”JS引擎,使用浏览器开发工具,然后请求模拟页面上的ajax/xhr调用。