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抓取百度首页的方法
May 19 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
python字典键值对的添加和遍历方法
Sep 11 Python
视觉直观感受若干常用排序算法
Apr 13 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python读取ini配置的类封装代码实例
Jan 08 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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 随机生成10位字符代码
2009/03/26 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
php-msf源码详解
2017/12/25 PHP
js 异步处理进度条
2010/04/01 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
numpy中索引和切片详解
2017/12/15 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
特色冷饮店创业计划书
2014/01/28 职场文书
激励员工的口号
2014/06/16 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Tomcat弱口令复现及利用
2022/05/06 Servers
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技