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解析excel文件存入sqlite数据库的方法
Nov 15 Python
一百多行python代码实现抢票助手
Sep 25 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
在Mac上删除自己安装的Python方法
2018/10/29 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python编写计算器功能
2019/10/25 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python双向链表原理与实现方法详解
2019/12/03 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
简易版租房协议书范本
2014/10/13 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL
SpringBoot整合Minio文件存储
2022/04/03 Java/Android