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重试装饰器示例
Feb 11 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
django manage.py扩展自定义命令方法
May 27 Python
Python实现注册、登录小程序功能
Sep 21 Python
django解决跨域请求的问题
Nov 11 Python
安装docker-compose的两种最简方法
Jul 30 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
浅谈Python中的继承
Jun 19 Python
Python截图并保存的具体实例
Jan 14 Python
python中的被动信息搜集
Apr 29 Python
python如何利用cv2模块读取显示保存图片
Jun 04 Python
一文搞懂python异常处理、模块与包
Jun 26 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
我的论坛源代码(九)
2006/10/09 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
小程序实现列表多个批量倒计时
2021/01/29 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Php多进程实现代码
2018/05/07 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
从python读取sql的实例方法
2020/07/21 Python
Python常用类型转换实现代码实例
2020/07/28 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
Python datetime模块的使用示例
2021/02/02 Python
应届生.NET方向面试题
2015/05/23 面试题
LINUX下线程,GDI类的解释
2016/12/14 面试题
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
应届大专生自荐书
2014/06/16 职场文书
天河观后感
2015/06/11 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2019年工作总结范文
2019/05/21 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
24年收藏2000多部退役军用电台
2022/02/18 无线电