为什么request .get()使用Python和浏览器检索不同的HTML ?
Why is requests.get() retrieving different HTML using Python than browser?
我正试图从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
相关文章:
- 如何在 jquery 和 javascript 中检索 html 标签属性
- 如何通过querystring传递和检索Html标记
- 存储/检索 html 5 文件对象,用于恢复损坏的文件上传
- 使用 Grunt 检索 html 正文的内容
- 无法使用 JavaScript 检索 HTML 元素的类型
- 如何检索 html 元素的值
- 检索 HTML 表值
- 使用 jQuery 检索 HTML 格式的内容
- 在jQuery插件图像点击中检索HTML
- 在Titanium SDK中保存和检索HTML和.aspx网页
- 将 HTML 放在 Javascript 源代码中或使用 AJAX 检索 HTML
- 在javascript中检索HTML元素的文字值,而不编码与号
- Angular 1.5 -用data检索html的组件
- 通过字符串返回函数检索HTML元素的href链接
- 在断开连接后检索html/javascript网页
- 使用AJAX检索HTML下拉列表值
- 使用从UIWebview中检索html标签
- 使用JavaScript检索HTML表中的复选框状态
- 如何检索HTML对象标记的文档对象
- 在c#代码MVC . net中检索html中的id元素