2013-04-04 45 views
2

我現在已經想到爲什麼這段代碼,不適用於這個特定的網站。在其他情況下,它工作正常。Html與美麗的湯分析返回空列表

url = "http://www.i-apteka.pl/search.php?node=443&counter=all" 
    content = requests.get(url).text 
    soup = BeautifulSoup(content) 

    links = soup.find_all("a", class_="n63009_prod_link") 
    print links 

在這種情況下,它打印「[]」,但顯然有一些鏈接。 任何想法?:)

+2

我看不出有'n63009_table_out'類中的任何鏈接。該類唯一的東西是'div'。你的意思是'soup.select('。n63009_table_out a')'? – 2013-04-04 21:12:46

+0

是的,那個類唯一的東西是'div'。所以代碼工作正常 - 它成功地返回了該類的所有鏈接。 – abarnert 2013-04-04 21:14:28

+0

有一點小錯誤,現在它是正確的,但它仍然返回[] – user985541 2013-04-04 21:15:49

回答

1

你已經發現你正在使用的任何解析器的錯誤。

我不知道你正在使用的解析器,但我知道這一點:

的Python 2.7.2(蘋果),BS 4.1.3(從PIP),libxml2的2.9.0(從家釀),lxml 3.1.0(來自pip)會得到與您完全相同的錯誤。我嘗試的其他東西 - 包括與libxml2 2.7.8(來自Apple)-works相同的東西。 lxml是默認的(至少4.1.3),如果你沒有指定其他任何東西,BS會先嚐試。我已經看到了libxml2 2.9.0的其他錯誤(其中大部分已經在trunk上修復了,但是還沒有發佈2.9.1)。所以,如果這是你的問題,你可能想降級到2.8.0和/或從樹頂部構建它。

但是,如果不是......它肯定對我來說是2.7.2的stdlib html.parser,在聊天中你用2.7.1測試了同樣的想法。雖然html.parser(特別是在2.7.3之前)是緩慢而脆弱的,但它對你來說似乎已經足夠好了。因此,最簡單的解決方案是這樣做的:

soup = BeautifulSoup(content, 'html.parser') 

...而不是讓它選擇它最喜歡的解析器。

欲瞭解更多信息,請參閱Specifying the parser to use(和上面和下面的部分)。

0

我有同樣的問題,當地的美麗湯正在工作,並在我的Ubuntu服務器上一直返回一個空列表。 我已經試過[1],並試圖許多依賴

最後什麼工作對我來說是鏈接如下許多解析器:

  • 刪除美麗的肥皂安裝
  • 刪除其所有的依賴關係(由指向apt-get的安裝python-BS4)
  • 再次使用命令波紋管

命令安裝它:

sudo apt-get install python-bs4 

pip install beautifulsoup4 

,我使用下面的代碼:

soup = BeautifulSoup(my_html_content, 'html.parser') 

[http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser][1]