Python scrapy爬取起点中文网小说榜单


Posted in Python onJune 13, 2021

一、项目需求

爬取排行榜小说的作者,书名,分类以及完结或连载

二、项目分析

目标url:“https://www.qidian.com/rank/hotsales?style=1&page=1

Python scrapy爬取起点中文网小说榜单

通过控制台搜索发现相应信息均存在于html静态网页中,所以此次爬虫难度较低。

Python scrapy爬取起点中文网小说榜单

通过控制台观察发现,需要的内容都在一个个li列表中,每一个列表代表一本书的内容。

Python scrapy爬取起点中文网小说榜单

在li中找到所需的内容

Python scrapy爬取起点中文网小说榜单

找到第两页的url
“https://www.qidian.com/rank/hotsales?style=1&page=1”
“https://www.qidian.com/rank/hotsales?style=1&page=2”
对比找到页数变化
开始编写scrapy程序。

三、程序编写

创建项目太简单,不说了

1.编写item(数据存储)

import scrapy

class QidianHotItem(scrapy.Item):
    name = scrapy.Field() #名称
    author = scrapy.Field() #作者
    type = scrapy.Field() #类型
    form= scrapy.Field() #是否完载

2.编写spider(数据抓取(核心代码))

#coding:utf-8

from scrapy import Request
from scrapy.spiders import Spider
from ..items import QidianHotItem
#导入下需要的库

class HotSalesSpider(Spider):#设置spider的类
    name = "hot" #爬虫的名称
    qidian_header={"user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"} #设置header
    current_page = 1 #爬虫起始页
    def start_requests(self): #重写第一次请求
        url="https://www.qidian.com/rank/hotsales?style=1&page=1"
        yield Request(url,headers=self.qidian_header,callback=self.hot_parse)
		#Request发起链接请求
		#url:目标url
		#header:设置头部(模拟浏览器)
		#callback:设置页面抓起方式(空默认为parse)
    def hot_parse(self, response):#数据解析
        #xpath定位
        list_selector=response.xpath("//div[@class='book-mid-info']")
        #获取所有小说
        for one_selector in list_selector:
            #获取小说信息
            name=one_selector.xpath("h4/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]

            item = QidianHotItem()
            #生产存储器,进行信息存储
            item['name'] = name
            item['author'] = author
            item['type'] = type
            item['form'] = form

            yield item #送出信息

            # 获取下一页URL,并生成一个request请求
            self.current_page += 1
            if self.current_page <= 10:#爬取前10页
                next_url = "https://www.qidian.com/rank/hotsales?style=1&page="+str(self.current_page)
                yield Request(url=next_url,headers=self.qidian_header,callback=self.hot_parse)


    def css_parse(self,response):
        #css定位
        list_selector = response.css("[class='book-mid-info']")
        for one_selector in list_selector:
            # 获取小说信息
            name = one_selector.css("h4>a::text").extract()[0]
            # 获取作者
            author = one_selector.css(".author a::text").extract()[0]
            # 获取类型
            type = one_selector.css(".author a::text").extract()[1]
            # 获取形式
            form = one_selector.css(".author span::text").extract()[0]
            # 定义字典

            item=QidianHotItem()
            item['name']=name
            item['author'] = author
            item['type'] = type
            item['form'] = form
            yield  item

3.start.py(代替命令行)

在爬虫项目文件夹下创建start.py。

Python scrapy爬取起点中文网小说榜单

from scrapy import cmdline
#导入cmd命令窗口
cmdline.execute("scrapy crawl hot -o hot.csv" .split())
#运行爬虫并生产csv文件

出现类似的过程代表爬取成功。

Python scrapy爬取起点中文网小说榜单

hot.csv

Python scrapy爬取起点中文网小说榜单

总结

本次爬虫内容还是十分简单的因为只用了spider和item,这几乎是所有scrapy都必须调用的文件,后期还会有middlewarse.py,pipelines.py,setting.py需要编写和配置,以及从javascript和json中提取数据,难度较大。

到此这篇关于Python scrapy爬取起点中文网小说榜单的文章就介绍到这了,更多相关Python爬取起点中文网内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现简单的TCP代理服务器
Oct 08 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
Python 3 判断2个字典相同
Aug 06 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
Apr 24 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
python如何删除列为空的行
Jul 17 Python
python3 re返回形式总结
Nov 20 Python
Python ellipsis 的用法详解
Nov 20 Python
python Pexpect模块的使用
Dec 25 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
js正确获取元素样式详解
2009/08/07 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
小程序指纹验证的实现代码
2018/12/04 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
python使用turtle绘制分形树
2018/06/22 Python
python线程的几种创建方式详解
2019/08/29 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
高三毕业寄语
2014/04/10 职场文书
2014年居委会工作总结
2014/12/09 职场文书
财务工作个人总结
2015/02/27 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
女性励志书籍推荐
2019/08/19 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
python opencv通过4坐标剪裁图片
2021/06/05 Python