免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6143 | 回复: 2
打印 上一主题 下一主题

html表格型数据用bs或者re模块怎么分析出(提取)对应的值的超链接 [复制链接]

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
1 [报告]
发表于 2014-03-06 16:57 |显示全部楼层
不是都有想法了吗?一步一步做,遇到具体问题再发问。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-03-07 11:27 |显示全部楼层
已有楼上热心朋友提供的Python2版本了,我顺路提供个Python3的。
  1. from bs4 import BeautifulSoup
  2. from urllib.request import Request, urlopen

  3. user_agent = \
  4.         'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) '\
  5.         'AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 '\
  6.         'Safari/537.73.11'

  7. def get_doc(url):
  8.     req = Request(url, headers={'User-Agent': user_agent})
  9.     return BeautifulSoup(urlopen(req).read().decode('GB18030'))

  10. def main():
  11.     doc = get_doc('http://www.porttrade.net/workinfo/PrintMD.aspx')
  12.     for tr in doc.select('table#DataGrid2 > tr'):
  13.         td = tr.select('td:nth-of-type(8)')
  14.         if not td or td[0].string.find('铁矿砂') == -1: continue
  15.         td = tr.select('td:nth-of-type(1) > a')
  16.         if not td: continue

  17.         name = td[0].string.strip()
  18.         url = 'http://www.porttrade.net/workinfo/' + td[0]['href']
  19.         tr_doc = get_doc(url)
  20.         td = tr_doc.select('span#txtbz')
  21.         if td:
  22.             note = td[0].string.strip() if td[0].string else 'None'
  23.             print('船名:{}\n备注:{}\n网址:{}\n'.format(name, note, url))

  24. if __name__ == '__main__':
  25.     main()
复制代码
执行输出:
  1. (py3) bash-3.2 $python --version
  2. Python 3.3.4
  3. (py3) bash-3.2 $python bs.py
  4. 船名:敬业6
  5. 备注:货备新苏港
  6. 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=343989

  7. 船名:长禄海
  8. 备注:货备新苏港。
  9. 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344094

  10. 船名:浙海161
  11. 备注:None
  12. 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344096

  13. 船名:金海鲲
  14. 备注:None
  15. 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344184

  16. 船名:陆海顺
  17. 备注:None
  18. 网址:http://www.porttrade.net/workinfo/SASP.aspx?id=344199
复制代码
注:
1. 全面的异常检查,我就懒得做了。
2. 尽量加上与本地浏览器一致的User-Agent。
3. Python 3的源文件编码默认是UTF-8
如果经常抓网页数据,了解WEB基础是必须的,这不是一两个下午能搞定的,做好长期战斗准备。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2014-03-09 10:21 |显示全部楼层
本帖最后由 timespace 于 2014-03-09 10:27 编辑

回复 9# prints
这里取的是第八列“装货名称”,你可以在这基础上随便改。细节就是两部分内容,其一要看bs4文档的select函数,其二就是了解CSS selector语法


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP