2017-08-26 15 views
0

オープンアクセスの学術論文からテーブルを削り取ろうとしていますが、何らかの理由でこの記事のテーブルを削り取ることができませんが、これは私が行ったことですが、ResultSetの "tables"リスト。助けてくれてありがとう。Pythonでテーブルを掻き集めるWeb

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にstatic <table>タグはありません。これはReactベースのページで、テーブルはJavaScriptで動的に作成されます。


編集:このページをこすりするには、データ

をフェッチするためのスクリプトを追加し、私は2つのオプションを参照してください。派遣蓋によって示唆されるように

  • を、あなたがヘッドレスブラウザシミュレータを使用することができますghost.py、phantomjs、HtmlUnit、Seleniumなどのjavascriptを実行することができます
  • または、html/javascriptのソースコードを見て、ブラウザのリクエストを見て、データソースを見つけることができます。

私は第2のものを好む。このスクリプトはテーブルのデータを含むページの内容を出力します。

# 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リクエストではできません。 –

関連する問題