对于很多学计算机的朋友来说,选择合适的学习资料非常重要。本文将使用Python爬取豆瓣编程评分大于9.0的书籍。本案例非常适合爬虫入门的朋友学习,一共只有3个功能。下图为最终结果:进入正题:1.合集来源分析:首先我们找到豆瓣的编程书网址:https://book.douban.com/tag/编程进入网址后,我们转到底部页面导航:通过分析页面地址,我们可以得到:https://book.douban.com/tag/%...{offset}&type=T这个地址就是我们要收集的内容。第一页开始=0,第二页开始=20...依此类推。找到要收集的URL后,下一步就是分析我们真正需要的数据在HTML文档中的位置。F12打开控制台,发现这些li标签正是我们的目标内容。书名、评论、评分分别对应li下的h2标签、class为rating_nums的span标签、class为pl的span标签。见下图:有了上面的内容,我们很容易得出一个思路:抓取页面上所有的li标签,循环处理这里的li标签,找到我们需要的三个内容,存入列表,排序他们根据scoreDatatocsv2.依赖包:除了上次用到的requests和BeautifulSoup,还增加了几个包。re正则表达式处理numpy是一个非常强大的数据处理库,因为本文会整理,所以用这个包很方便csv用于将最终结果保存到csv时间这里主要用到sleep函数3.EncodingFirst我们定义了一个get函数,它接受一个页码,表示要抓取多少页。该函数的主要功能是抓取指定页码的所有图书的信息,包括书名、评分、评论数。并将其保存在一个二维数组中。代码解读:因为豆瓣的分页是根据url中的start参数(相当于offset),所以在开头定义了一个offset变量,根据我们传入的页码来计算start参数的正确值。后面通过find_all方法获取到所有li对象,并存入book_info_list列表中,接下来就是遍历列表,从每个元素中获取star、title、comment三个变量。最后得到一个二维数组结果。定义排序方法,接收上面得到的result变量,根据得分对列表进行排序。将最终的内衬数据写入csv。4.总结以上就是我们爬取豆瓣的一个小案例。有经验的朋友会发现这个案例有很大的不足。在运行这个程序的时候,我们会发现它会很慢。原因是每次请求豆瓣的分页url后,紧接着就是获取书名等一站式操作,获取到本页所有数据后,再抓取下一个分页页。即完全同步的编码方式。所以慢是必然的。那么如何调整代码结构让程序快速运行呢?这里介绍一个简单常用的方法:我们可以使用多线程技术,python的threading包就是专门用于多线程的。这样就多加了两个包:threadingqueue可以把上述代码中下载页面URL部分的代码放到一个单独的线程中运行,将下载的html文档存放在一个队列中。然后多开几个线程读取队列中的数据,并使用BS4进行分析,将分析出来的list数据结构追加到另一个外部list中。最后去排序这个其他列表。获取源码请前往:《后台说说》公众号后台回复“豆瓣”。
