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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
python去掉空白行的多种实现代码
Mar 19 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
python读取Excel实例详解
Aug 17 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
Python中按键来获取指定的值
Mar 02 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
python装饰器代替set get方法实例
Dec 19 Python
Django框架之中间件MiddleWare的实现
Dec 30 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
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php实现生成验证码实例分享
2016/04/10 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python操作 hbase 数据的方法
2016/12/18 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
行政经理岗位职责
2015/04/15 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js