- 论坛徽章:
- 11
|
已有楼上热心朋友提供的Python2版本了,我顺路提供个Python3的。- from bs4 import BeautifulSoup
- from urllib.request import Request, urlopen
- user_agent = \
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) '\
- 'AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 '\
- 'Safari/537.73.11'
- def get_doc(url):
- req = Request(url, headers={'User-Agent': user_agent})
- return BeautifulSoup(urlopen(req).read().decode('GB18030'))
- def main():
- doc = get_doc('http://www.porttrade.net/workinfo/PrintMD.aspx')
- for tr in doc.select('table#DataGrid2 > tr'):
- td = tr.select('td:nth-of-type(8)')
- if not td or td[0].string.find('铁矿砂') == -1: continue
- td = tr.select('td:nth-of-type(1) > a')
- if not td: continue
- name = td[0].string.strip()
- url = 'http://www.porttrade.net/workinfo/' + td[0]['href']
- tr_doc = get_doc(url)
- td = tr_doc.select('span#txtbz')
- if td:
- note = td[0].string.strip() if td[0].string else 'None'
- print('船名:{}\n备注:{}\n网址:{}\n'.format(name, note, url))
- if __name__ == '__main__':
- main()
复制代码 执行输出:- (py3) bash-3.2 $python --version
- Python 3.3.4
- (py3) bash-3.2 $python bs.py
- 船名:敬业6
- 备注:货备新苏港
- 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=343989
- 船名:长禄海
- 备注:货备新苏港。
- 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344094
- 船名:浙海161
- 备注:None
- 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344096
- 船名:金海鲲
- 备注:None
- 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344184
- 船名:陆海顺
- 备注:None
- 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344199
复制代码 注:
1. 全面的异常检查,我就懒得做了。
2. 尽量加上与本地浏览器一致的User-Agent。
3. Python 3的源文件编码默认是UTF-8
如果经常抓网页数据,了解WEB基础是必须的,这不是一两个下午能搞定的,做好长期战斗准备。 |
|