豆瓣读书用户评分爬虫

最近有好友不会做豆瓣读书的评论和评分的爬虫求助博主,博主做完后发给了该好友,本着造福小白的心理,博主在这里给大家分享自己写的豆瓣爬虫。

1.分析网页

这里我们先随便打开一本书的评论,由于通过csdn访问豆瓣时会自动添加referer,请手动复制网址在新标签页中打开
(https://book.douban.com/subject/30442488/comments/)
在页面源代码中查找评论的位置,在class属性为"short"的<span>标签中
在页面源代码中查找评分的位置,在class属性为"vote-count的<span>标签中

2.代码解析

首先我们先创建接下来需要用的的东西

import requests
#导入requests模块用于请求网页
from lxml import etree
#从lxml模块中导入etree模块用于解析网页class Userspinfen():
#定义一个Douban类,用于承载后面的代码def __init__(self,url): #定义__init__方法,并且设置形参url#设置类中的私有变量self.url = url          #设置请求的urlself.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0",}#创建requests请示网页时使用的请求头self.pinfen = 0         #用于计算评分self.sub_page_url = []  #用于承载品论页的urlself.pinlun = []        #用于承载评论信息· #Python类创建实例时默认就会调用__init__方法,也就是说给__init__方法使用的形参需要在创建实例时传递进来,

这里我们创建一个专门用于请求网页的方法,要求每次调用时需要传递进来一个url地址,发起requests.get请求,使用传递进来的url作为请求地址,使用类中的私有变量self.headers,作为请求头。并且将网页返回内容作为get_html方法的返回值.

def get_html(self,page_url):return requests.get(url=page_url,headers=self.headers).text

在创建一个用于检测返回的评论页面url是否存在于定义的私有变量sub_page_url中,如果没有则存入

def test_more(self,sub_page_url):
#要求每次调用时需要传递进来评论页面的url地址for url in sub_page_url:#使用for循环将评论页面url地址列表中的url依此取出if not (url in self.sub_page_url):self.sub_page_url.append(url)#检测url是否存在于私有变量sub_page_url,如果没有则存入

定义一个专门用于提取评论和评分的方法

def get_info(self,page_url):
#定义一个get_info方法,并且要求调用时传递page_urlhtml_etree = etree.HTML(self.get_html(page_url))#调用之前定义的get_html方法,并将本方法的page_url传递进入,将返回值转换为etree格式   pinfen = html_etree.xpath('//span[@class="vote-count"]/text()')#在网页代码etree对象中使用xpath匹配出class属性为"vote-count的\<span>标签中的内容self.pinlun += html_etree.xpath('//span[@class="short"]/text()')#在网页代码etree对象中匹配出class属性为"short"的\<span>标签中的内容for i in pinfen:self.pinfen += int(i)#使用for循环提取出评分

定义一个用于检测评论页面url的函数

def test_page_number(self,main_url):
#定义一个get_info方法,并且要求调用时传递main_urlhtml_etree = etree.HTML(self.get_html(main_url))#调用get_html方法将返回的内容转换为etree格式sub_page_url = html_etree.xpath('//li[@class="p"]/a[@class="page-btn"]/@href')#匹配出第一页,上一页,下一页的选项的内容if not (len(sub_page_url) == 2):self.test_more(sub_page_url)#传递进test_more方法检测是否有重复的self.test_page_number(self.url+"{}".format(sub_page_url[-1]))#将刚刚爬取到的下一页的url和定义的私有变量self.url拼接起来,然后作为调用本函数的实参,调用自身else:for url  in self.sub_page_url:self.get_info(self.url+"{}".format(url))#当检测的到的页面url数量等于2时,证明已经到达了品论的最后一页,说明此时已经拥有了全部评论页面的url,此时就可以补齐评论页url调用爬取信息的方法,获取信息

(由于豆瓣读书的评论不显示总的评论页数,仅仅只有第一页,上一页,下一页的选项,只能通过不停的爬取下一页选项,直到爬取不到下一页选项时说明到评论最后一页了)

3.代码分享

import requests
from lxml import etreeclass Douban():def __init__(self,url):self.url = urlself.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0",}self.pinfen = 0self.sub_page_url = []self.pinlun = []def get_html(self,page_url):return requests.get(url=page_url,headers=self.headers).textdef test_more(self,sub_page_url):for url in sub_page_url:if not (url in self.sub_page_url):self.sub_page_url.append(url)def get_info(self,page_url):html = self.get_html(page_url)html_etree = etree.HTML(html)pinfen = html_etree.xpath('//span[@class="vote-count"]/text()')self.pinlun += html_etree.xpath('//span[@class="short"]/text()')for i in pinfen:self.pinfen += int(i)                def test_page_number(self,main_url):html_etree = etree.HTML(self.get_html(main_url))sub_page_url = html_etree.xpath('//li[@class="p"]/a[@class="page-btn"]/@href')if not (len(sub_page_url) == 2):self.test_more(sub_page_url)self.test_page_number(self.url+"{}".format(sub_page_url[-1]))else:for url  in self.sub_page_url:self.get_info(self.url+"{}".format(url))      douban = Douban("https://book.douban.com/subject/30442488/comments/")
douban.test_page_number("https://book.douban.com/subject/30442488/comments/")
print ("该书用于总评分{}".format(douban.pinfen))
print (douban.pinlun)

【python--爬虫】豆瓣读书用户评分爬虫相关推荐

  1. Python爬虫(5):豆瓣读书练手爬虫

    Python爬虫(5):豆瓣读书练手爬虫 我们在之前的文章中基本上掌握了Python爬虫的原理和方法,不知道大家有没有练习呢.今天我就来找一个简单的网页进行爬取,就当是给之前的兵书做一个实践.不然不就 ...

  2. Python爬虫——豆瓣读书

    准备 豆瓣读书网址是:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=880&type=T 红色箭头标记的就是我们要获取的信息,我们有 ...

  3. Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

    文章目录 1.Scrapy注意点 2. Scrapy爬取豆瓣读书和评分 代码部分 数据定义items.py 爬虫部分spiders/book.py 数据存储部分pipelines.py 启动爬虫执行c ...

  4. 爬虫豆瓣读书top250,保存为本地csv文件

    爬虫豆瓣读书top250,保存为本地csv文件 目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSou ...

  5. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(四)

    之前的博客已经写了python爬取豆瓣读书top250的相关信息和清洗数据.将数据导入数据库并创建相应的数据表,以及进行项目准备工作,接下来开始正式编写后台代码. 如果有没看懂的或是不了解上一部分说的 ...

  6. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(一)

    由于刚上完了商业智能实训的课程,根据老师的要求我们做了一个完整的项目. 1. 项目要求与内容 项目具体要求:利用python爬取数据并进行清洗和预处理,将清洗后的数据存到数据库中,后端利用Java或是 ...

  7. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(二)

    之前的博客已经写了python爬取豆瓣读书top250的相关信息,接下来继续看如何清洗数据. 如果有没看懂的或是不了解上一部分说的是什么内容的,请看https://blog.csdn.net/qq_4 ...

  8. Python爬虫豆瓣读书,让你时时刻刻获取书籍的第一手信息

    读万卷书行万里路,书是我们获取知识的一大途径,读书可以让人变得精神勃发,让人,能够更加的理解和认识这个世界 今天,给大家分享一个代码,让大家能够将豆瓣读书中的所有图书爬取下来,存储在本地 准备 我们可 ...

  9. 爬虫豆瓣读书top250,保存为本地csv文件,可用excel查看(具体步骤和容易遇到的坑)

    1.目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSoup,csv库. 2.分析网址 打开豆瓣读书网 ...

最新文章

  1. 常考数据结构与算法:反转链表
  2. NOIP2009 潜伏者
  3. vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
  4. Photoshop常用快捷键
  5. rust盖错了怎么拆除_细说Rust错误处理
  6. Qt笔记-Qt获取百度下拉推荐词
  7. ORACLE字符集基础知识
  8. 关于SpringMVC中model的attribute无法指定别名的解决方案
  9. Docker系列(五)实战:在容器中部署静态网站
  10. 【转】javascript弹出固定大小的窗口页面
  11. gentoo今天收获记录[原创]
  12. 1288元,苍井空“空系列”内衣微博开卖
  13. 手机视频水印去不掉有马赛克
  14. 局域网计算机怎样注销用户名,win10系统取消局域网共享用户名密码的解决办法...
  15. 英文连写字体怎么练_漂亮的英语字体是这样练成的!!
  16. python 怎么爬桌软件数据_python爬虫怎么从软件界面抓取数据?
  17. DDL、DML、DQL、DCL、DTL MySQL常用语法大全
  18. 架构设计---技术栈01
  19. ubuntu环境下制作win10启动盘,ubuntu安装图形化磁盘分区工具
  20. Linux i2ctool 工具的使用方法

热门文章

  1. python_scrapy_房天下
  2. FFmpeg源码分析:av_read_frame()读取音视频帧
  3. 手机图片查看GPS信息
  4. Android 4.1官方文档chm格式
  5. 运筹学_图解法_week1
  6. 使用Wireshark抓取基于srsRAN环境的LTE RRC 包
  7. 服务器脉冲信号线用什么线,请问信号线防雷器怎么做?
  8. 上海国家会计学院-美国亚利桑那州大学EMBA硕士中国项目校友
  9. Ubuntu安装Hadoop3.1.3教程
  10. LeetCode随缘刷题之回文数