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 多进程通信模块的简单实现
Feb 20 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
Python标准库笔记struct模块的使用
Feb 22 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
python实时检测键盘输入函数的示例
Jul 17 Python
django之状态保持-使用redis存储session的例子
Jul 28 Python
python 实现矩阵填充0的例子
Nov 29 Python
python剪切视频与合并视频的实现
Mar 03 Python
导致python中import错误的原因是什么
Jul 01 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Git命令之分支详解
2021/03/02 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
机械设计专业应届生求职信
2013/11/21 职场文书
办公室内勤工作职责
2013/12/11 职场文书
企业车辆管理制度
2014/01/24 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
SQL Server实现分页方法介绍
2022/03/16 SQL Server