使用Python中的BeautifulSoup进行Webscraping

时间:2017-02-24 16:02:38

标签: python web-scraping beautifulsoup

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 here

使用上面的代码,它列出了您可以在图像中看到的所有标签/元素。我想得到“£2.00”。除非我再次调用.find('td'),如下所示:

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

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

1 个答案:

答案 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'