2014-10-10 33 views
1

我正試圖學習如何刮美麗的湯。我的試用是從阿里巴巴網站獲取公司名稱。在Beautfiful Soup中提取標籤內容超出範圍和最大遞歸誤差

我的理解是標籤的內容像列表一樣管理,您可以再次使用find_all來提取子元素。例如:

bar = soup.find_all("some", {"class" : "mainstuff"}) 
for foo in bar: 
    print foo.contents[1].find_all("a", {"class" : "otherstuff"}) 

我的問題是我似乎無法索引我的標記的內容,以提取名稱。

當我嘗試時,我得到[0]的最大遞歸深度超出錯誤和[1]的超出範圍錯誤的索引。

import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://www.alibaba.com/products/isostatic_press.html") 

soup = BeautifulSoup(r.content) 

supplier = soup.find_all("a", {"class" : "dot-product"}) #Location of company name 

for name in supplier: 
    print name.text 

給人

北京天馬吊帶有限公司

聯繫方式

聯繫供應商

聯繫方式 聯繫供應商

秦皇島Aidite高技術CERAM集成電路有限公司

聯繫方式

聯繫供應商

聯繫方式 聯繫供應商

print name.contents 

給人

[<span class="gs1"></span>] 
[u'Beijing Tianma Sling Co., Ltd.'] 
[] 
[u'Contact Details', <i></i>] 
[<i></i>] 
[<span class="ico-email"></span>, u'Contact Supplier'] 
[] 
[u'Contact Details', <i></i>] 
[<span class="ico-csb"></span>, u'Contact Supplier'] 
[] 
[<span class="gs3"></span>] 
[u'Qinhuangdao Aidite High-Technical Ceramics Co., Ltd.'] 
[] 
[u'Contact Details', <i></i>] 

我想只是公司名字,但當我嘗試

print name.contents[0] 

我得到RuntimeError:最大遞歸深度超過

print name.contents[1] 

給出IndexError:列表索引超出範圍

這種技術似乎在其他網頁工作(www.yellowpages.com),所以我無法弄清爲什麼現在我得到一個錯誤。

回答

0

我發現如果a標籤有公司名稱,則name.contents返回長度爲1的數組。所以你可以嘗試這種方法。

for name in supplier: 
    if name.text and len(name.contents) == 1: 
     print name.text 
+0

非常感謝! – 2014-10-11 20:48:06