仅在使用Python请求加载延迟数据后刮取HTML?

时间:2017-10-04 20:37:17

标签: 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,这里有很多答案。

2 个答案:

答案 0 :(得分:1)

您必须运行无头浏览器才能运行延迟抓取。请使用硒。 这是示例代码。代码使用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()

答案 1 :(得分:0)

您可以通过API requesting it directly访问所需的值并分析JSON响应。

import requests
import json

res = request.get('https://api.example.com/api/')
d = json.loads(res.text)

print(d['market'])