python - 仅在使用Python请求延迟数据加载后才抓取html?

标签 python python-3.x web-scraping beautifulsoup python-requests

我正在尝试使用 python 学习数据抓取,并且一直在使用 Requests 和 BeautifulSoup4 库。它适用于普通的 html 网站。但是,当我尝试从延迟加载数据的网站中获取一些数据时,我发现我得到了一个空值。一个例子是

from bs4 import BeautifulSoup
from operator import itemgetter
from selenium import webdriver
url = "https://www.example.com/;1"
browser = webdriver.PhantomJS()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
a = soup.find('span', 'buy')
print(a)

我试图从这里获取: (值)

我已经提到了类似的主题,并尝试在与此处提供的解决方案类似的行上执行我的代码。但不知怎的,它似乎不起作用。我是这里的新手,因此需要帮助来完成这项工作。 How to scrape html table only after data loads using Python Requests?

表格(内容)可能是由 JavaScript 生成的,因此无法“看到”。我正在使用 python3.6/PhantomJS/Selenium,正如这里很多答案所建议的那样。

最佳答案

您必须运行 headless 浏览器才能运行延迟抓取。请使用 Selenium 。 这是示例代码。代码使用chrome浏览器作为驱动

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome(<chromedriver path here>)
browser.set_window_size(1120, 550)
browser.get(link)
element = WebDriverWait(browser, 3).until(
   EC.presence_of_element_located((By.ID, "blabla"))
)
data = element.get_attribute('data-blabla')
print(data)
browser.quit()

关于python - 仅在使用Python请求延迟数据加载后才抓取html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46573754/

相关文章:

python - 如何映射或排序两个不同数据帧的值?

python - 列表理解中的 index(max(my_list)) 给出最大值的所有实例,而不仅仅是第一次出现

Python - 对继承感到困惑

JavaScript 范围/代码迭代不同步

python - 需要在 Django 应用程序中编写 .wav 文件,但不能在 Heroku(或 S3)上编写

python - 禁用 Python 的 re.findall() 的 "group becomes tuple"行为

具有不同值类型的 Python3 输入

c# - HtmlAgilityPack SelectNodes,处理

python - 刮掉的表格无法完整打印

Python:翻译/替换不是你想要的字符串单词