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语言使用技巧分享
May 31 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Python使用sqlite3模块内置数据库
May 07 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
Python 随机按键模拟2小时
Dec 30 Python
Python 内存管理机制全面分析
Jan 16 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
5.PHP的其他功能
2006/10/09 PHP
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
动物学专业毕业生求职信
2013/10/11 职场文书
物业电工岗位职责
2013/11/20 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
综合实践活动总结
2014/05/05 职场文书
企业百日安全活动总结
2015/05/07 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python