为了账号安全,请及时绑定邮箱和手机立即绑定

利用Beautifusoup爬取网页指定内容

标签:
Python

之前一直就对网络爬虫很感兴趣,刚好实验室学长有个小任务,就揽下来尝试着去做下,花了一天的时间完成了!

Beautifulsoup是什么

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

大家可以从上面那个Beautifulsoup中文官方文档中去学习下Beautifulsoup的一些基本的用法,非常好用的一个从html文件中提取数据的python库。

注意:Mac在安装beautifulsoup的时候使用pip安装时记得使用sudo获取管理员权限,不然可能会失败,还有setuptools版本的问题,大家可以自行百度。

这次任务

这个网址这样类似的表格上提取指定栏目的数据。我们可以通过开发者工具来看下,我们需要的内容在哪个标签里。

https://img1.sycdn.imooc.com//5d31b3ff00015e9a07290385.jpg

开发者工具


红框内的数据是我们要提取的,而右边是网页的html层级。可以看出我们想要的数据在多层表格内,td,tr中间。

解决问题

爬虫就是将整个网页通过url将网页爬取下来,然后根据语法规则去匹配html代码中存在的数据,通过python的beautifulsoup可以很快的将数据给‘爬’出来。

html = requests.get(html_url).text
soup = BeautifulSoup(html,'html.parser') ```
通过这两句我们就将要爬取的html页面给保存下来了,并初始化了Beautifulsoup,方便之后的提取。
通过开发者工具我们可以看出,整个表格都是由tr,td等标签组成,我们要先获取表格的表头,然后再去获得对应表头内的数据。在使用beautiful的时候,我们首先要理解html文档的dom树的概念。这样在使用parent的时候就会比较容易。我们主要使用了get_text()方法和获得父亲,兄弟的节点,然后在其中find_all(' ')找对应的标签即可。
```pythonfor nobr in table_title:    if re_table_title.match(nobr.get_text()):       
    table_content = nobr.parent.next_sibling.next_sibling                      
    KO_ID = table_content.find('a').get_text()        
    Anno = table_content.find_all('td')[1].get_text()       
    break ```
可以看出,我们找到了表头```table.title```,它返回的是一个list,便利其中的找到是我们需要的表头,这里使用了正则表达式```match```也是我们非常常用的在爬虫使用中的一个技术。然后找到其兄弟节点也就是同级的对应的表的内容```table_content```其中的数据。最后把数据都写入文件中保存起来,这样就实现了网络爬虫爬取我们想要的数据。


![完整代码](http://upload-images.jianshu.io/upload_images/1545198-c48c59fcea3b25fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>哈哈,做完还是非常有成就感的啊!



作者:LIN_LESS
链接:https://www.jianshu.com/p/d86685f75d94


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消