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+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python脚本完成post接口测试的实例
Dec 17 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Python使用configparser库读取配置文件
Feb 22 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
通过实例了解python__slots__使用方法
Sep 14 Python
详解Python模块化编程与装饰器
Jan 16 Python
用Python将库打包发布到pypi
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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
pandas DataFrame运算的实现
2020/06/14 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
质量整改报告范文
2014/11/08 职场文书
严以用权学习心得体会
2016/01/12 职场文书
工作报告范文
2019/06/20 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Python 匹配文本并在其上一行追加文本
2022/05/11 Python
python双向链表实例详解
2022/05/25 Python