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版的文曲星猜数字游戏代码
Sep 02 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
python3 深浅copy对比详解
Aug 12 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python实现简单井字棋小游戏
Mar 05 Python
Django migrate报错的解决方案
May 20 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
Django验证码的生成与使用示例
2017/05/20 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
毕业生怎样写好自荐信
2013/11/11 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
小学英语课教学反思
2016/02/15 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
apache ftpserver搭建ftp服务器
2022/05/20 Servers