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实现线程池代码分享
Jun 21 Python
Python模拟百度登录实例详解
Jan 20 Python
python访问抓取网页常用命令总结
Apr 11 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
Opencv求取连通区域重心实例
Jun 04 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
Pandas加速代码之避免使用for循环
May 30 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中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
php集成开发环境详解
2019/09/24 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
vue如何引入sass全局变量
2018/06/28 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
Python编程之序列操作实例详解
2017/07/22 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python安装OpenCV的示例代码
2020/03/05 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
事业单位竞聘上岗实施方案
2014/03/28 职场文书
保护动物的标语
2014/06/11 职场文书
法人授权委托书样本
2014/09/19 职场文书
批评与自我批评总结
2014/10/17 职场文书
毕业证明模板
2015/06/19 职场文书
校园之声广播稿
2015/08/18 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技