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框架-爬取小说信息相关推荐

  1. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  2. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  3. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  4. python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

    先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...

  5. [Python爬虫]使用Scrapy框架爬取微博

    Scrapy框架爬取微博 简介 包 Scrapy框架 main.py(启动文件) setting.py(配置文件) pq.py(项目文件) 话题小组模块 模板 图片模块 用户模块 视频模块(未找到视频 ...

  6. Python爬虫实战+Scrapy框架 爬取当当网图书信息

    1.环境准备 1.在python虚拟环境终端使用 pip install scrapy下载scrapy依赖库 2.使用scrapy startproject book创建scrapy心目工程 3.使用 ...

  7. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  8. scrapy框架爬取小说

    首先创建相关项目文件,打开cmd输入以下命令: scrapy startproject 项目名称 接着切换到目录文件: cd 项目名称 定义要爬取的网站: scrapy genspider 爬虫名称 ...

  9. 爬虫之Scrapy框架爬取彼岸壁纸案例分享

    爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...

最新文章

  1. 美多商城之用户登录(账号登录)
  2. linux时序图工具,在Linux系统下通过IAuto.deb或星火商店安装IAuto流程图工具
  3. sdram 时钟相位_stm32f429主频大于160MHz时,sdram数据不稳定
  4. 存储过程——创建通用存储过程(七)
  5. extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...
  6. java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
  7. 启动vue项目失败,报错Failed at the node-sass@4.14.1 postinstall script.
  8. 补PSP进度(10.28-11.3)
  9. NLP简报(Issue#1)
  10. Linux中last的用法及参数,查看登陆系统用户的信息
  11. 【Django 2021年最新版教程16】pycharm model模型修改之后如何同步更新到mysql数据库
  12. C# Winform 自动更新程序实例
  13. python中rgb颜色_python颜色显示
  14. 六年码农生涯的 2019 总结:君子坐而论道,少年起而行之
  15. 视频流中的 I帧 P帧 B帧 .
  16. php扩展引擎手册,模板引擎-THINKPHP 5.0 手册最新版
  17. Python10行代码实现模拟百度搜索
  18. 如何理解CNN中的感受野(receptive-field)以及如何计算感受野?
  19. 域名解析问题:聚名网域名该如何解析?有什么介绍吗?
  20. 什么是resultful 以及为什么要使用它

热门文章

  1. 解析新文娱产业的三点趋势与四大难题
  2. MyCat做MySQL负载均衡(享学课堂,咕泡学院听课笔记)
  3. Abbkine通用型免疫(共)沉淀试剂盒解决方案
  4. mysql数据库安装:windows下安装MSI版
  5. 修改菜单项字体的颜色和大小
  6. Windows cmd 命令行清空
  7. 《嵌入式系统 – 玩转ART-Pi开发板(基于RT-Thread系统)》第9章 基于Select/Poll实现并发服务器(二)
  8. C Primer Plus (第6版) 读书笔记_Chapter 2
  9. 电动软密封蝶阀行业现状调研及趋势分析报告
  10. Appium简介与原理