2017-08-26 115 views
0

試圖從開放獲取學術文章刮表,由於某些原因,我不能從這篇文章刮表,這是我所做的,但由此產生的ResultSet「表」是一個空名單。謝謝你的幫助。網絡刮python表

from bs4 import BeautifulSoup 
import requests 

url_page = "http://www.sciencedirect.com/science/article/pii/S0378874116301696" 

content = requests.get(url_page).content 
soup = BeautifulSoup(content, "lxml") 
tables = soup.find_all("table") 
+2

什麼是'html'? –

+0

對不起,我在複製代碼時犯了一個錯誤,我現在編輯它應該是 – user3089520

回答

1

在這個頁面的html中沒有靜態的<table>標籤。這是一個基於React的頁面,並且表格是使用javascript動態創建的。


編輯:添加一個腳本來獲取數據

要湊這個網頁,我看到兩個選項:

  • 正如哈肯蓋建議,您可以使用模擬瀏覽器模擬器能夠執行JavaScript像ghost.py,phantomjs,HtmlUnit,Selenium等
  • 或者你可以瀏覽html/javascript源代碼,觀看瀏覽器請求並找到數據源。

我更喜歡第二個;此腳本打印頁面的內容,包括表格中的數據:

# Python 3 
import requests, re, json 

def discard_format(dico): 
    if "_" in dico: 
     return dico["_"] 
    elif "$$" in dico: 
     return dico["$$"] 
    elif "$" in dico: 
     return "" 
    return dico 

url_page = "http://www.sciencedirect.com/science/article/pii/S0378874116301696" 
req = requests.get(url_page) 
html = req.content.decode("utf-8") 
token = re.search('"entitledToken":"(.*?)"', html).group(1) 
url_data = "http://www.sciencedirect.com/sdfe/arp/pii/S0378874116301696/body?entitledToken=%s" % token 
data = requests.get(url_data, cookies=req.cookies).content.decode("utf-8") 
#print(data) 
jsondata = json.loads(data, object_hook=discard_format) 
print(jsondata) 
+0

是的,這是正確的,但答案是什麼?這比別的更重要。 –

+0

是的,是否可以指出如何去做? – user3089520

+1

你需要使用像硒這樣的東西來刮這個網站。它不能用簡單的http請求來完成,因爲這些文章似乎並沒有呈現在服務器端。 –