【python--爬虫】豆瓣读书用户评分爬虫
豆瓣读书用户评分爬虫
最近有好友不会做豆瓣读书的评论和评分的爬虫求助博主,博主做完后发给了该好友,本着造福小白的心理,博主在这里给大家分享自己写的豆瓣爬虫。
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--爬虫】豆瓣读书用户评分爬虫相关推荐
- Python爬虫(5):豆瓣读书练手爬虫
Python爬虫(5):豆瓣读书练手爬虫 我们在之前的文章中基本上掌握了Python爬虫的原理和方法,不知道大家有没有练习呢.今天我就来找一个简单的网页进行爬取,就当是给之前的兵书做一个实践.不然不就 ...
- Python爬虫——豆瓣读书
准备 豆瓣读书网址是:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=880&type=T 红色箭头标记的就是我们要获取的信息,我们有 ...
- Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)
文章目录 1.Scrapy注意点 2. Scrapy爬取豆瓣读书和评分 代码部分 数据定义items.py 爬虫部分spiders/book.py 数据存储部分pipelines.py 启动爬虫执行c ...
- 爬虫豆瓣读书top250,保存为本地csv文件
爬虫豆瓣读书top250,保存为本地csv文件 目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSou ...
- python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(四)
之前的博客已经写了python爬取豆瓣读书top250的相关信息和清洗数据.将数据导入数据库并创建相应的数据表,以及进行项目准备工作,接下来开始正式编写后台代码. 如果有没看懂的或是不了解上一部分说的 ...
- python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(一)
由于刚上完了商业智能实训的课程,根据老师的要求我们做了一个完整的项目. 1. 项目要求与内容 项目具体要求:利用python爬取数据并进行清洗和预处理,将清洗后的数据存到数据库中,后端利用Java或是 ...
- python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(二)
之前的博客已经写了python爬取豆瓣读书top250的相关信息,接下来继续看如何清洗数据. 如果有没看懂的或是不了解上一部分说的是什么内容的,请看https://blog.csdn.net/qq_4 ...
- Python爬虫豆瓣读书,让你时时刻刻获取书籍的第一手信息
读万卷书行万里路,书是我们获取知识的一大途径,读书可以让人变得精神勃发,让人,能够更加的理解和认识这个世界 今天,给大家分享一个代码,让大家能够将豆瓣读书中的所有图书爬取下来,存储在本地 准备 我们可 ...
- 爬虫豆瓣读书top250,保存为本地csv文件,可用excel查看(具体步骤和容易遇到的坑)
1.目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSoup,csv库. 2.分析网址 打开豆瓣读书网 ...
最新文章
- 常考数据结构与算法:反转链表
- NOIP2009 潜伏者
- vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
- Photoshop常用快捷键
- rust盖错了怎么拆除_细说Rust错误处理
- Qt笔记-Qt获取百度下拉推荐词
- ORACLE字符集基础知识
- 关于SpringMVC中model的attribute无法指定别名的解决方案
- Docker系列(五)实战:在容器中部署静态网站
- 【转】javascript弹出固定大小的窗口页面
- gentoo今天收获记录[原创]
- 1288元,苍井空“空系列”内衣微博开卖
- 手机视频水印去不掉有马赛克
- 局域网计算机怎样注销用户名,win10系统取消局域网共享用户名密码的解决办法...
- 英文连写字体怎么练_漂亮的英语字体是这样练成的!!
- python 怎么爬桌软件数据_python爬虫怎么从软件界面抓取数据?
- DDL、DML、DQL、DCL、DTL MySQL常用语法大全
- 架构设计---技术栈01
- ubuntu环境下制作win10启动盘,ubuntu安装图形化磁盘分区工具
- Linux i2ctool 工具的使用方法
热门文章
- python_scrapy_房天下
- FFmpeg源码分析:av_read_frame()读取音视频帧
- 手机图片查看GPS信息
- Android 4.1官方文档chm格式
- 运筹学_图解法_week1
- 使用Wireshark抓取基于srsRAN环境的LTE RRC 包
- 服务器脉冲信号线用什么线,请问信号线防雷器怎么做?
- 上海国家会计学院-美国亚利桑那州大学EMBA硕士中国项目校友
- Ubuntu安装Hadoop3.1.3教程
- LeetCode随缘刷题之回文数