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使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
Python实现遍历数据库并获取key的值
May 17 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
Python GUI布局尺寸适配方法
Oct 11 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 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
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
Java及python正则表达式详解
2017/12/27 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python中的for循环
2018/09/28 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
30年同学聚会邀请函
2014/01/25 职场文书
企业管理标语
2014/06/10 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
大学生自荐信范文
2015/03/05 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
刑事撤诉申请书
2015/05/18 职场文书
外出学习心得体会范文
2016/01/18 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫