Web使用python和beautifulsoup刮一个凌乱的网页

时间:2014-11-28 04:55:08

标签: python html css-selectors beautifulsoup html-parsing

您好我正在尝试获取此页面上每家会计师事务所的姓名,地址和电话号码:

http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx?Page=0

我无法将树导航到信息所在的位置。

在Python中使用'美味汤'和'请求',这就是我试图获取公司名称的方式:

import bs4
import requests

page = request.get('http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx?Page=0')
soup = bs4.BeautifulSoup(page.text)

name = soup.select('......')

所以基本上我只是按照我使用chrome开发人员工具找到的选择器继续下树:

#ctl00_ContentPlaceHolder1_dgLawyers > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(1) > td:nth-child(1) > a

然而,美丽的汤不会接受这条道路。我试过没有'>'符号也是如此。

我尝试的第二种方法是只看树,然后输入css选择器,从身体到我想要的地方:

soup.select('body table tbody tr ... etc')

但这也不起作用。

我想最后这个问题归结为我怎样才能写出一条美丽的汤会接受的道路。有人可以解释我如何解决这个问题吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

通过id获取公司的表格并迭代内部的每个table

import bs4
import requests

page = requests.get('http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx?Page=0')
soup = bs4.BeautifulSoup(page.content)

for company in soup.select('table#ctl00_ContentPlaceHolder1_dgLawyers tr > td > table'):
    name = company.a.text
    number = company.tr.find_all('td')[-1].text
    address = company.find_all('tr')[-1].td.text

    print {'name': name, 'number': number, 'address': address}

打印:

{'address': u'Level 4. 36 Carrington St Sydney. NSW 2000', 'name': u'A D Hill & Co', 'number': u'0292991733'}
{'address': u'Suite 103, Level 1. 84 Pitt Street Sydney. NSW 2000', 'name': u'A2Z Insolvency Solutions', 'number': u'02 8065 6607'}
{'address': u'810 George St Sydney. NSW 2000', 'name': u'AAA iPro Services Australia', 'number': u'1300554959'}
{'address': u'Level 39. 2 Park St Sydney. NSW 2000', 'name': u'AccFin Services', 'number': u'0290047825'}
...