0

我想學習使用python的數據刮擦,並已使用Requests和BeautifulSoup4庫。它適用於普通的html網站。但是當我試圖從延遲數據加載的網站中獲取一些數據時,我發現我得到了一個空值。一個例子是僅在使用Python請求延遲數據加載後才能刮取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,這裏提供了很多答案。

+0

你可以使用一些這http://selenium-python.readthedocs.io/waits.html或只加'time.sleep(N)' – AndMar

+0

可以請你檢查網址?看來;有一個錯字,並可能導致您的刮板 – jabargas

+0

@AndMar time.sleep錯誤似乎在這種情況下工作。請建議您建議我在哪裏添加? – fazal

回答

0

您必須運行無頭瀏覽器才能運行延遲刮取。請使用硒。 這裏是示例代碼。代碼使用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() 
+0

它像一個魅力使用鉻webdriver。但它實際上打開了瀏覽器窗口。相反,有沒有類似無頭瀏覽器?也許如果你有類似的代碼phantomjs或不打開一個物理瀏覽器,但在控制檯窗口左右的排序下工作?再次感謝。一旦我得到你的迴應,我將把這個帖子標記爲已回答。 – fazal

+0

請將webdriver.chorme()替換爲webdriver.PhantomJS()。所有其他過程都是一樣的。 – songxunzhao

+0

謝謝我會試一試。 – fazal

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']) 
+0

感謝您的回覆。雖然api會爲這個網站做些什麼。最初的想法是仍然理解如何在數據加載稍有延遲的情況下獲得在此類網站上獲得的價值。這是這篇文章的關鍵問題。 – fazal