2016-07-31 4 views
1

私はpython 3.5で美しいスープを使って次のウェブサイトの表から情報を抽出したいと思います。美味しいスープはテーブルのヘッダーを抽出するだけです

http://www.askapatient.com/viewrating.asp?drug=19839&name=ZOLOFT 

私のプログラムはオフラインで動作する必要があるため、最初にウェブページを保存する必要があります。

私のコンピュータにウェブページを保存しました。次のコードを使用してテーブル情報を抽出しました。しかし、問題は、コードがテーブルの見出しを抽出することだけです。

これは私のコードです:

from urllib.request import Request, urlopen 
from bs4 import BeautifulSoup 
url = "file:///Users/MD/Desktop/ZoloftPage01.html" 


home_page= urlopen(url) 
soup = BeautifulSoup(home_page, "html.parser") 
table = soup.find("table", attrs={"class":"ratingsTable" }) 
comments = [td.get_text() for td in table.findAll("td")] 
print(comments) 

そして、これはコードの出力です:

['RATING', '\xa0 REASON', 'SIDE EFFECTS FOR ZOLOFT', 'COMMENTS', 'SEX', 'AGE', 'DURATION/DOSAGE', 'DATE ADDED ', '\xa0’] 

私は、テーブルの行のすべての情報が必要になります。 ご協力いただきありがとうございます!

答えて

1

これは、ページのが壊れたのためです。あなたはの寛大なパーサーのようにhtml5libのように切り替える必要があります。ここに私のために何が働いています:

from pprint import pprint 

import requests 
from bs4 import BeautifulSoup 

url = "http://www.askapatient.com/viewrating.asp?drug=19839&name=ZOLOFT" 
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}) 

# HTML parsing part 
soup = BeautifulSoup(response.content, "html5lib") 
table = soup.find("table", attrs={"class":"ratingsTable"}) 
comments = [[td.get_text() for td in row.find_all("td")] 
      for row in table.find_all("tr")] 
pprint(comments) 
+0

ありがとうございました!私はPython 3.5を使用しています。コードに次のエラーがあります。 "ImportError:名前の要求をインポートできません" – Mary

+0

@Maryは、ページソース部分のダウンロードは実際にはここでは関係ありません。しかし、この例をそのまま使用するには、['requests'モジュール](http://docs.python-requests.org/ja/master/)をインストールする必要があります。 – alecxe

+0

私はそれを高く評価します。どうもありがとうございます ! – Mary

関連する問題