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利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
python使用turtle库绘制树
Jun 25 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
python集合是否可变总结
Jun 20 Python
python pandas时序处理相关功能详解
Jul 03 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Django返回HTML文件的实现方法
Sep 17 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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&mysql(四)
2006/10/09 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
php函数与传递参数实例分析
2014/11/15 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python之PyUnit单元测试实例
2014/10/11 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
python 消费 kafka 数据教程
2019/12/21 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
品质主管岗位职责
2014/03/16 职场文书
对教师的评语
2014/04/28 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
幸福终点站观后感
2015/06/04 职场文书
员工手册董事长致辞
2015/07/29 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS