您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python scrapy爬取起点中文网小说榜单

51自学网 2021-10-30 22:29:09
  python
这篇教程Python scrapy爬取起点中文网小说榜单写得很实用,希望能帮到您。

一、项目需求

爬取排行榜小说的作者,书名,分类以及完结或连载

二、项目分析

目标url:“https://www.qidian.com/rank/hotsales?style=1&page=1

在这里插入图片描述

通过控制台搜索发现相应信息均存在于html静态网页中,所以此次爬虫难度较低。

在这里插入图片描述

通过控制台观察发现,需要的内容都在一个个li列表中,每一个列表代表一本书的内容。

在这里插入图片描述

在li中找到所需的内容

在这里插入图片描述

找到第两页的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 scrapyclass QidianHotItem(scrapy.Item):    name = scrapy.Field() #名称    author = scrapy.Field() #作者    type = scrapy.Field() #类型    form= scrapy.Field() #是否完载

2.编写spider(数据抓取(核心代码))

#coding:utf-8from scrapy import Requestfrom scrapy.spiders import Spiderfrom ..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。

在这里插入图片描述

from scrapy import cmdline#导入cmd命令窗口cmdline.execute("scrapy crawl hot -o hot.csv" .split())#运行爬虫并生产csv文件

出现类似的过程代表爬取成功。

在这里插入图片描述

hot.csv

在这里插入图片描述

总结

本次爬虫内容还是十分简单的因为只用了spider和item,这几乎是所有scrapy都必须调用的文件,后期还会有middlewarse.py,pipelines.py,setting.py需要编写和配置,以及从javascript和json中提取数据,难度较大。

到此这篇关于Python scrapy爬取起点中文网小说榜单的文章就介绍到这了,更多相关Python爬取起点中文网内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


教你用Python爬取英雄联盟皮肤原画
Python Django ORM连表正反操作技巧
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。