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+pyqt实现12306图片验证效果
Oct 25 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
详解Python 函数如何重载?
Apr 23 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Django的CVB实例详解
Feb 10 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
Python四款GUI图形界面库介绍
Jun 05 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
PHP chop()函数讲解
2019/02/11 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python中类型关系和继承关系实例详解
2015/05/25 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
文艺委员竞选稿
2015/11/19 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
Python 如何实现文件自动去重
2021/06/02 Python