Python scrapy爬取小说代码案例详解
作者:咔咔kk 发布时间:2021-09-18 17:03:52
scrapy是目前python使用的最广泛的爬虫框架
架构图如下
解释:
Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
DownloaderMiddlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests
一。安装
pip install Twisted.whl
pip install Scrapy
Twisted的版本要与安装的python对应,https://jingyan.baidu.com/article/1709ad8027be404634c4f0e8.html
二。代码
本实例采用xpaths解析页面数据
按住shift-右键-在此处打开命令窗口
输入scrapy startproject qiushibaike 创建项目
输入scrapy genspiderqiushibaike 创建爬虫
1>结构
2>qiushibaike.py爬虫文件
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders.crawl import Rule, CrawlSpider
class BaiduSpider(CrawlSpider):
name = 'qiushibaike'
allowed_domains = ['qiushibaike.com']
start_urls = ['https://www.qiushibaike.com/text/']#启始页面
#
rules= (
Rule(LinkExtractor(restrict_xpaths=r'//a[@class="contentHerf"]'),callback='parse_item',follow=True),
Rule(LinkExtractor(restrict_xpaths=r'//ul[@class="pagination"]/li/a'),follow=True)
)
def parse_item(self, response):
title=response.xpath('//h1[@class="article-title"]/text()').extract_first().strip() #标题
time=response.xpath(' //span[@class="stats-time"]/text()').extract_first().strip() #发布时间
content=response.xpath('//div[@class="content"]/text()').extract_first().replace('','\n') #内容
score=response.xpath('//i[@class="number"]/text()').extract_first().strip() #好笑数
yield({"title":title,"content":content,"time":time,"score":score});
3>pipelines.py 数据管道[code]class QiushibaikePipeline:
class QiushibaikePipeline:
def open_spider(self,spider):#启动爬虫中调用
self.f=open("xiaoshuo.txt","w",encoding='utf-8')
def process_item(self, item, spider):
info=item.get("title")+"\n"+ item.get("time")+" 好笑数"+item.get("score")+"\n"+ item.get("content")+'\n'
self.f.write(info+"\n")
self.f.flush()
def close_spider(self,spider):#关闭爬虫中调用
self.f.close()
4>settings.py
开启ZhonghengPipeline
ITEM_PIPELINES = {
'qiushibaike.pipelines.QiushibaikePipeline': 300,
}
5>0main.py运行
from scrapy.cmdline import execute
execute('scrapy crawl qiushibaike'.split())
6>结果:
生成xiaohua.txt,里面有下载的笑话文字
来源:https://www.cnblogs.com/hzcjd/p/12926824.html


猜你喜欢
- 问题:python 在调用dll 的时候出现了精度问题总结:使用decimal库进行转换就可以正常传递。遇到的问题具体情况dll 生成函数代
- 目录序列容器序列与扁平序列不可变序列与可变序列列表推导生成器表达式Tips小结序列序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否
- 本文实例为大家分享了Bootstrap导航条实现的具体代码,供大家参考,具体内容如下navbar-header:导航的头部,一般情况下用来放
- 前言随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点。基本编码能力
- 本文实例为大家分享了JS实现京东快递单号查询的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html
- 本文实例讲述了C语言实现访问及查询MySQL数据库的方法。分享给大家供大家参考,具体如下:1、添加头文件路径(MySQL安装路径中的incl
- pytorch的广播语义(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文档:1、什么是广播
- 源码下载地址网络构建一、什么是SRGANSRGAN出自论文Photo-Realistic Single Image Super-Resolu
- 前言ThinkPHP出于安全的考虑增加了表单令牌Token,由于通过Ajax异步更新数据仅仅部分页面刷新数据,就导致了令牌Token不能得到
- 目录前言创建组件总结前言Vue3 增加了很多让人眼前一亮的特征,suspense 组件就是其中之一,对处理异步请求数据非常实用,本文通过简单
- 一、前言Python语言近年来人气爆棚。它广泛应用于数据科学,人工智能,以及网络安全问题中,由于代码可读性较强,学习效率较高,吸引了许多非科
- 1.0 创建存储过程和函数创建存储过程和函数就是将经常使用的一组 SQL 语句组合在一起,并将这些 SQL 语句当作一个整体存储
- python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。函数定义:eval(expression, global
- 能够为数据库数据提供的最简单的用户界面之一就是窗体,窗体可以一次性呈现出来自同一记录的各个域。本文通过python3+pyqt5改写实现了p
- 前言在开始之前,对time.After使用有疑问的朋友们可以看看这篇文章:https://www.aspxhome.com/article/
- 前言之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php, java, Py
- Ursina是一个3D引擎,初步使用方法,见文章:详解Python 3D引擎Ursina如何绘制立体图形了解完Ursina的初步用
- 本文所示代码实现python编程方向键控制图片上下左右,我们首先看下演示结果。演示:实例代码:bif="1.jpg" m
- 格式化输出:format()format():把传统的%替换为{}来实现格式化输出1.使用位置参数:就是在字符串中把需要输出的变量值用{}来
- 如下所示:Description:将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)Examp