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中判断文件编码的chardet(实例讲解)
Dec 21 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
对python中类的继承与方法重写介绍
Jan 20 Python
详解Python中is和==的区别
Mar 21 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Python读取JSON数据操作实例解析
May 18 Python
Python 爬虫性能相关总结
Aug 03 Python
谈谈python垃圾回收机制
Sep 27 Python
Python中相见恨晚的技巧
Apr 13 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
php简单的上传类分享
2016/05/15 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
Python脚本暴力破解栅栏密码
2015/10/19 Python
浅析python中的分片与截断序列
2016/08/09 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
师范应届生语文教师求职信
2013/10/29 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
优秀教师主要事迹
2014/02/01 职场文书
先进集体获奖感言
2014/02/13 职场文书
网络技术专业推荐信
2014/02/20 职场文书
员工趣味活动方案
2014/08/27 职场文书
网络营销计划
2015/01/17 职场文书
检讨书大全
2015/01/27 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python