Python scrapy爬取小说代码案例详解


Posted in Python onJuly 09, 2020

scrapy是目前python使用的最广泛的爬虫框架

架构图如下

Python scrapy爬取小说代码案例详解

解释:

  • 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>结构

Python scrapy爬取小说代码案例详解

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,里面有下载的笑话文字

Python scrapy爬取小说代码案例详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中time()方法的使用的教程
May 22 Python
python实现比较两段文本不同之处的方法
May 30 Python
python如何通过protobuf实现rpc
Mar 06 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
Python读写文件基础知识点
Jun 10 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
python各类经纬度转换的实例代码
Aug 08 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
python 获取字典键值对的实现
Nov 12 Python
python实现过滤敏感词
May 08 Python
Python实现Hash算法
Mar 18 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 #Python
pytorch 多分类问题,计算百分比操作
Jul 09 #Python
详解Python 循环嵌套
Jul 09 #Python
keras分类之二分类实例(Cat and dog)
Jul 09 #Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 #Python
Python2.x与3​​.x版本有哪些区别
Jul 09 #Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 #Python
You might like
解析PHP可变函数的经典用法
2013/06/20 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
JS操作JSON要领详细总结
2013/08/25 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
实现vuex原理的示例
2020/10/21 Javascript
浅谈Python爬取网页的编码处理
2016/11/04 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python实现区域填充的示例代码
2021/02/03 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
应用化学专业职业生涯规划书
2014/01/22 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
幼儿园中班个人总结
2015/02/28 职场文书