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设计模式之单例模式实例
Apr 26 Python
python开启多个子进程并行运行的方法
Apr 18 Python
解读Django框架中的低层次缓存API
Jul 24 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
Django forms组件的使用教程
Oct 08 Python
python 获取图片分辨率的方法
Jan 08 Python
Python中字符串List按照长度排序
Jul 01 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python pygame实现球球大作战
Nov 25 Python
Python 必须了解的5种高级特征
Sep 10 Python
python接口自动化框架实战
Dec 23 Python
python实现图片转字符画
Feb 19 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
四个PHP非常实用的功能
2015/09/29 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python3 实现的人人影视网站自动签到
2016/06/19 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
数据库测试通常都包括哪些方面
2015/11/30 面试题
中专自荐信
2013/10/13 职场文书
个人担保书范文
2014/05/20 职场文书
施工安全标语
2014/06/07 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
青涩记忆观后感
2015/06/18 职场文书