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
使用上面的代码,它列出了您可以在图像中看到的所有标签/元素。我想得到“£2.00”。除非我再次调用.find('td'),如下所示:
div = crawler.find('div', {"id": "standardRates"}).find('td')
它只返回Landline而不是下面的行,即使它具有相同的标记。我在网络抓取方面经验很少。我该如何定位这个标签(2.00英镑的行)?
答案 0 :(得分: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'