我正在尝试从HTML表格中提取数据,但在使用requests.get()
时,HTML似乎无法正确加载。相反,源代码中的一行显示为:
"未启用JavaScript,因此此页面可能无法正常运行。"
当我导航到Google Chrome浏览器中的页面时,HTML就会显示出来。
如何让Python脚本加载正确的HTML?
答案 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