之前一直就对网络爬虫很感兴趣,刚好实验室学长有个小任务,就揽下来尝试着去做下,花了一天的时间完成了!
Beautifulsoup是什么
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
大家可以从上面那个Beautifulsoup中文官方文档中去学习下Beautifulsoup的一些基本的用法,非常好用的一个从html文件中提取数据的python库。
注意:Mac在安装beautifulsoup的时候使用pip安装时记得使用sudo获取管理员权限,不然可能会失败,还有setuptools版本的问题,大家可以自行百度。😄
这次任务
从这个网址这样类似的表格上提取指定栏目的数据。我们可以通过开发者工具来看下,我们需要的内容在哪个标签里。
红框内的数据是我们要提取的,而右边是网页的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(' ')找对应的标签即可。
```python
for 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)
>哈哈,做完还是非常有成就感的啊!