后台有很多粉丝希望分享一些关于爬虫的知识,因为不管是做数据分析还是数据挖掘,其核心都是数据,实际生产活动中,很大一部分数据是来源于爬虫。
今天我们先来学习一下爬虫入门基础:requests和BeautifulSoup。这两大利器构成了我们爬虫的主要要素,很多深入的应用都是在这些基础之上的,下面我们就结合一个真实案例来进行学习。
今天我们要爬取的是新浪爱问共享资料,这个网站上有很多免费的文档,尤其是中小学生学习资料,是个不错的来源。
![67d580c8de543a048bd00a96ae94c2ca.png](https://i-blog.csdnimg.cn/blog_migrate/1c399f0b1c9efb1137825e72f3af8f5f.jpeg)
首先搜索我们需要的文档,比如:我想要关于初三物理的文档,搜索结果如下:
![e79e5916ebb079953feb3728196107e0.png](https://i-blog.csdnimg.cn/blog_migrate/f54eb43930b9bec7cb848db65c04f31e.jpeg)
我们可以看到,每页有30个文档,并且总共有20页,这么多作业肯定狗亲戚家小朋友做的了。
那么,我们现在就来构思我们的爬虫,首先,我们要获取每篇文档的链接,接着再进入文档,爬取详细的内容,先来查看一下网页结构:
![4f02418aa82de9eee3475c9194f0241e.png](https://i-blog.csdnimg.cn/blog_migrate/b30bfe3a5da683d286d06cd3fde96458.jpeg)
可以看到,30个文档模块整整齐齐的摆放在我们面前。那么首先就要来解析这个搜索目录了,先来看代码:
![ab1ad54d826528cc6ff5edc3055a23d5.png](https://i-blog.csdnimg.cn/blog_migrate/3fc24aa246a79a2cabdd478ae5510555.jpeg)
我们用到了requests这个库,这个库主要是用来请求url,并且获取这个url中的内容:
![06f2d7444c37f76f37455070b791af3a.png](https://i-blog.csdnimg.cn/blog_migrate/17aae824953252b526900b31949a815d.jpeg)
我分别打印了r和r.text,第一个返回的是200,表示网页请求成果,之后的是网页的详细信息。拿到网页之后该怎么办呢,下一步就是解析网页的内容,并且获取我们想要的信息,r.text返回的是一个文本,计算机并不认识,所以我们需要先把它整理成结构化的网页文档,这里就需要BeautifulSoup这个包了,老规矩先看代码:
![b5c9e04b6103e29e1aff2cc1b651d7cc.png](https://i-blog.csdnimg.cn/blog_migrate/2049c3234b3909b233fee3851fdb4651.jpeg)
首先把request返回的值使用html.parer进行解析,其次通过查找我们发现,所有的链接都存在于a标签当中,并且这些标签的class属性都是sts_8,所以我们就拿到了结果:
![8826ea9fdc39a4f7ee82fe9d6a2988e5.png](https://i-blog.csdnimg.cn/blog_migrate/32d8a409dbaba3bcff46d44476f9efbf.jpeg)
所有的结果都拿到了,但是这并不是我们的最终结果,我们想要的仅仅是href属性的值,我们发现,所有的结果都保存在一个列表当中,所以我们还有一个办法:
![b36a158fe7a80ec57c285ccc4c6d1f29.png](https://i-blog.csdnimg.cn/blog_migrate/0304851a9c98b5daae6b69f6dab78997.jpeg)
通过遍历列表的中的值,获取每个值的href属性,看下结果:
![234870382d72358126b845f58b912de4.png](https://i-blog.csdnimg.cn/blog_migrate/813ce294e2dd95cb3ca4fe80d1f27dbe.jpeg)
这正是我们想要的文章链接,所以拿到这些链接之后,我们就可以顺理成章的去获取具体文档内容了,剩下的交给大家自己练习了!按照这个思路,我们几乎可以爬取新浪所有文档,赶紧试试吧。