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中ConfigParse模块的用法
Sep 29 Python
python实现连接mongodb的方法
May 08 Python
Python3搜索及替换文件中文本的方法
May 22 Python
深入理解python try异常处理机制
Jun 01 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Python探索之修改Python搜索路径
Oct 25 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python感知机实现代码
Jan 18 Python
浅谈python标准库--functools.partial
Mar 13 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
php实现文件预览功能
2017/05/23 PHP
客户端静态页面玩分页
2006/06/26 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
javascript关于继承解析
2016/05/10 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
浅析Python多线程下的变量问题
2015/04/28 Python
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
Python内置函数delattr的具体用法
2017/11/23 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
茶叶店创业计划书范文
2014/01/19 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
党校毕业个人总结
2015/02/28 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript