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实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
python中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
学python安装的软件总结
Oct 12 Python
python SVD压缩图像的实现代码
Nov 05 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
关于Python中定制类的比较运算实例
Dec 19 Python
python实现滑雪游戏
Feb 22 Python
如何理解python面向对象编程
Jun 01 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 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
linux下 C语言对 php 扩展
2008/12/14 PHP
分享php分页的功能模块
2015/06/16 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
javascript 中的try catch应用总结
2017/04/01 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
简述Python中的面向对象编程的概念
2015/04/27 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
教师绩效工资方案
2014/02/01 职场文书
民生工程实施方案
2014/03/22 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
停发工资证明范本
2015/06/12 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL