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 专题一 函数的基础知识
Mar 16 Python
Python 闭包的使用方法
Sep 07 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python实现超市扫码仪计费
May 30 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python提取照片坐标信息的实例代码
Aug 14 Python
Python缓存技术实现过程详解
Sep 25 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
用python实现名片管理系统
Jun 18 Python
linux中nohup和后台运行进程查看及终止
Jun 24 Python
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
You might like
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
老生常谈js数据类型
2017/08/03 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
vue开发中遇到的问题总结
2020/04/07 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python 含参构造函数实例详解
2017/05/25 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
一个入门级python爬虫教程详解
2021/01/27 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
英格兰足协官方商店:England Store
2019/07/12 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
竞选大学学委演讲稿
2014/09/13 职场文书
大学生见习报告范文
2014/11/03 职场文书
500字作文之关于爸爸
2019/11/14 职场文书