2017-02-24 102 views
0
resp = urlopen('http://international.o2.co.uk/internationaltariffs 
/getintlcallcosts?countryId=IND').read() 
crawler = bs4.BeautifulSoup(resp, 'html.parser') 
div = crawler.find('div', {"id": "standardRates"}) 
div 

enter image description hereWebscraping与BeautifulSoup在Python

与上面的代码它列出了所有的标签/元素,你可以在图片中看到。我想获得“2.00英镑”。除了当我再次调用.find(“TD”)如下:

div = crawler.find('div', {"id": "standardRates"}).find('td') 

它只返回座机,而不是线下,即使它具有相同的标签。我在网络抓取方面的经验很少。我如何定位这个标签(2.00英镑的行)?

+3

尝试'的findAll()',而不是仅仅找'()'' – MooingRawr

+3

.findAll( 'TD')[1]'要准确 –

+0

大奏效。虽然结果是一个列表,所以当我使用.contents时,字符串被方括号包围。我可以得到它,所以它只是一个字符串? – Paulos

回答

1

您可以使用此方法相当直接去的£2.00以前的兄弟。

首先找到所需的表格,然后找到td并将其作为Landline作为字符串。然后得到这个td的父母,得到的这个下一个兄弟,终于得到了一个同级。

>>> import requests 
>>> get = requests.get('http://international.o2.co.uk/internationaltariffs/getintlcallcosts?countryId=IND') 
>>> page = get.text 
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(page,'lxml') 
>>> Landline_td = soup.find('table', {'id': 'standardRatesTable'}).find_all(string='Landline')[0] 
>>> Landline_td 
'Landline' 
>>> Landline_td.findParent().findNextSibling() 
<td>£2.00</td> 
>>> Landline_td.findParent().findNextSibling().text 
'£2.00'