2016-07-31 73 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

這是因爲頁面的損壞的HTML。您需要切換到更多寬鬆解析器,比如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

@在此下載頁面源部分其實並不相關。但是,如果您想按照原樣使用示例,則需要安裝['requests'模塊](http://docs.python-requests.org/en/master/)。 – alecxe

+0

我非常感謝。非常感謝 ! – Mary