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设置socket代理的方法
Jan 14 Python
python中assert用法实例分析
Apr 30 Python
Python中字符串的修改及传参详解
Nov 30 Python
详解python中的 is 操作符
Dec 26 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
django将数组传递给前台模板的方法
Aug 06 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
详解python logging日志传输
Jul 01 Python
浅析Python 条件控制语句
Jul 15 Python
django使用graphql的实例
Sep 02 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
多重?l件?合查?(二)
2006/10/09 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python决策树之C4.5算法详解
2017/12/20 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
PHP高级工程师面试问题推荐
2013/01/18 面试题
教师学习培训邀请函
2014/02/04 职场文书
民族团结先进个人材料
2014/02/05 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
店铺转让协议书
2014/12/02 职场文书
后备干部推荐材料
2014/12/24 职场文书
家长会后的感想
2015/08/11 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
Java实现多线程聊天室
2021/06/26 Java/Android