Python爬虫之scrapy框架-爬取小说信息
1、需求分析
我们要得到小说热销榜的数据,每部小说的提取内容为:小说名字、作者、类型、形式。然后将得到的数据存入CSV文件。
2、创建项目
创建一个scrapy爬虫项目方式如下:
(1)在D盘下面创建一个文件夹scrapyProject
(2)打开终端,输入cmd回车
(3)将当前文件夹改到上面创建好的文件下
d:
cd d:\scrapyProject
(4)创建一个名为qidian_hot的项目
scrapy startproject qidian_hot
(5)用pycharm打开qidian_hot项目
其他文件暂时不用管,在spiders文件夹下创建一个Python文件qidian_hot_spider.py.
在这个文件下编写代码。
3、编写代码
from scrapy import Request
from scrapy.spiders import Spiderclass HotSalesSpider(Spider):name='hot'%定义爬虫名称,之后运行时要用到%起始的URL列表start_urls=['https://www.qidian.com/all/']%解析函数,使用xpath解析def parse(self,response):list_selector=response.xpath("//div[@class='book-mid-info']")%定位到对应的divfor one_selector in list_selector:name=one_selector.xpath("h2/a/text()").extract()[0]author=one_selector.xpath("p[1]/a[1]/text()").extract()[0]type=one_selector.xpath("p[1]/a[2]/text()").extract()[0]form=one_selector.xpath("p[1]/span/text()").extract()[0]%每一部小说的信息保存到字典hot_dict={"name":name,"author":author,"type":type,"form":form}yield hot_dict%使用yield返回字典
4、终端运行爬虫程序
(1)将文件夹改到项目文件夹下
d:
cd d:\scrapyProject\qidian_hot
(2)输入爬虫执行命令,回车
hot是爬虫名称,- o hot.csv是将爬取到的数据保存到CSV文件
scrapy crawl hot -o hot.csv
以下就是爬取到的数据,已保存到CSV:
name,author,type,form
夜的命名术,会说话的肘子,都市,连载
灵境行者,卖报小郎君,科幻,连载
不科学御兽,轻泉流响,玄幻,连载
这游戏也太真实了,晨星LL,轻小说,连载
深空彼岸,辰东,都市,连载
择日飞升,宅猪,仙侠,连载
神秘复苏,佛前献花,仙侠,连载
我的属性修行人生,滚开,玄幻,连载
宇宙职业选手,我吃西红柿,科幻,连载
家父汉高祖,历史系之狼,历史,连载
明克街13号,纯洁滴小龙,都市,连载
大夏文圣,七月未时,仙侠,连载
道诡异仙,狐尾的笔,玄幻,连载
我已不做大佬好多年,萌俊,都市,连载
我在修仙界长生不死,木工米青,仙侠,连载
术师手册,听日,轻小说,连载
镇妖博物馆,阎ZK,悬疑,连载
星界使徒,齐佩甲,游戏,连载
诸界第一因,裴屠狗,玄幻,连载
修仙就是这样子的,凤嘲凰,仙侠,连载
5、改进
设置请求头、重写start_requests()方法
from scrapy import Request
from scrapy.spiders import Spiderclass HotSalesSpider(Spider):name='hot1'# 设置用户代理,伪装成浏览器qidian_headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0;""Win64;x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}'''start_urls=['https://www.qidian.com/rank/yuepiao/year2022-month06-page1/','https://www.qidian.com/rank/yuepiao/year2022-month06-page2/','https://www.qidian.com/rank/yuepiao/year2022-month06-page3/','https://www.qidian.com/rank/yuepiao/year2022-month06-page4/','https://www.qidian.com/rank/yuepiao/year2022-month06-page5/']'''#获取初始的request,重写start_requests()方法def start_requests(self):url="https://www.qidian.com/rank/yuepiao/year2022-month06-page1/"#生成请求对象,设置URL,headers,callback(回调函数,把下载好的页面即Request对象发送给解析函数,执行数据解析功能)yield Request(url,headers=self.qidian_headers,callback=self.qidian_parse)def qidian_parse(self,response):list_selector=response.xpath("//div[@class='book-mid-info']")for one_selector in list_selector:name=one_selector.xpath("h2/a/text()").extract()[0]author=one_selector.xpath("p[1]/a[1]/text()").extract()[0]type=one_selector.xpath("p[1]/a[2]/text()").extract()[0]form=one_selector.xpath("p[1]/span/text()").extract()[0]hot_dict={"name":name,"author":author,"type":type,"form":form}yield hot_dict
还可以把请求头放到setting.py文件下:这样就不用每次都引入了
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'qidian_hot (+http://www.yourdomain.com)'
USER_AGENT="Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
6、获取多页
关键是找到页码改变时,URL中参数的改变规律
from scrapy import Request
from scrapy.spiders import Spiderclass HotSalesSpider(Spider):name='hot'current_page=1#记录当前的页码,初始值为1# 设置用户代理,伪装成浏览器'''qidian_headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0;""Win64;x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}''''''start_urls=['https://www.qidian.com/rank/yuepiao/year2022-month06-page1/','https://www.qidian.com/rank/yuepiao/year2022-month06-page2/','https://www.qidian.com/rank/yuepiao/year2022-month06-page3/','https://www.qidian.com/rank/yuepiao/year2022-month06-page4/','https://www.qidian.com/rank/yuepiao/year2022-month06-page5/']'''#获取初始的request,重写start_requests()方法def start_requests(self):url="https://www.qidian.com/rank/yuepiao/year2022-month06-page1/"#生成请求对象,设置URL,headers,callback(回调函数,把下载好的页面即Request对象发送给解析函数,执行数据解析功能)yield Request(url,callback=self.qidian_parse)#已在setting.py中设置了请求头def qidian_parse(self,response):list_selector=response.xpath("//div[@class='book-mid-info']")for one_selector in list_selector:name=one_selector.xpath("h2/a/text()").extract()[0]author=one_selector.xpath("p[1]/a[1]/text()").extract()[0]type=one_selector.xpath("p[1]/a[2]/text()").extract()[0]form=one_selector.xpath("p[1]/span/text()").extract()[0]hot_dict={"name":name,"author":author,"type":type,"form":form}yield hot_dict#获取下一页的URL,并生成Request请求,提交给引擎self.current_page+=1if self.current_page<=3:next_url='https://www.qidian.com/rank/yuepiao/year2022-month06-page%d/'%(self.current_page)yield Request(next_url,callback=self.qidian_parse)
Python爬虫之scrapy框架-爬取小说信息相关推荐
- 19. python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...
- python爬虫——用Scrapy框架爬取阳光电影的所有电影
python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...
- 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容
python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...
- python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战
先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...
- [Python爬虫]使用Scrapy框架爬取微博
Scrapy框架爬取微博 简介 包 Scrapy框架 main.py(启动文件) setting.py(配置文件) pq.py(项目文件) 话题小组模块 模板 图片模块 用户模块 视频模块(未找到视频 ...
- Python爬虫实战+Scrapy框架 爬取当当网图书信息
1.环境准备 1.在python虚拟环境终端使用 pip install scrapy下载scrapy依赖库 2.使用scrapy startproject book创建scrapy心目工程 3.使用 ...
- scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...
- scrapy框架爬取小说
首先创建相关项目文件,打开cmd输入以下命令: scrapy startproject 项目名称 接着切换到目录文件: cd 项目名称 定义要爬取的网站: scrapy genspider 爬虫名称 ...
- 爬虫之Scrapy框架爬取彼岸壁纸案例分享
爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...
最新文章
- 美多商城之用户登录(账号登录)
- linux时序图工具,在Linux系统下通过IAuto.deb或星火商店安装IAuto流程图工具
- sdram 时钟相位_stm32f429主频大于160MHz时,sdram数据不稳定
- 存储过程——创建通用存储过程(七)
- extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...
- java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
- 启动vue项目失败,报错Failed at the node-sass@4.14.1 postinstall script.
- 补PSP进度(10.28-11.3)
- NLP简报(Issue#1)
- Linux中last的用法及参数,查看登陆系统用户的信息
- 【Django 2021年最新版教程16】pycharm model模型修改之后如何同步更新到mysql数据库
- C# Winform 自动更新程序实例
- python中rgb颜色_python颜色显示
- 六年码农生涯的 2019 总结:君子坐而论道,少年起而行之
- 视频流中的 I帧 P帧 B帧 .
- php扩展引擎手册,模板引擎-THINKPHP 5.0 手册最新版
- Python10行代码实现模拟百度搜索
- 如何理解CNN中的感受野(receptive-field)以及如何计算感受野?
- 域名解析问题:聚名网域名该如何解析?有什么介绍吗?
- 什么是resultful 以及为什么要使用它