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 爬虫的工具列表大全
Jan 31 Python
深入理解Python变量与常量
Jun 02 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
分享8点超级有用的Python编程建议(推荐)
Oct 13 Python
python pygame实现挡板弹球游戏
Nov 25 Python
python实现小程序推送页面收录脚本
Apr 20 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
解决Django transaction进行事务管理踩过的坑
Apr 24 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php 什么是PEAR?
2009/03/19 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
PHP中soap的用法实例
2014/10/24 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
RequireJs的使用详解
2017/02/19 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
基于JS实现web端录音与播放功能
2019/04/17 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
判断网页编码的方法python版
2016/08/12 Python
python使用matplotlib绘制热图
2018/11/07 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
5.1手机促销活动
2014/01/17 职场文书
搞笑车尾标语
2014/06/23 职场文书
2014年法务工作总结
2014/12/11 职场文书
个人先进事迹总结
2015/02/26 职场文书
思品教学工作总结
2015/08/10 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android