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查询whois的方法
Jul 18 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
Pycharm生成可执行文件.exe的实现方法
Jun 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
第七章 php自定义函数实现代码
2011/12/30 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
pytorch标签转onehot形式实例
2020/01/02 Python
python 错误处理 assert详解
2020/04/20 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
中专生自我鉴定范文
2014/02/02 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
React实现动效弹窗组件
2021/06/21 Javascript
Python访问Redis的详细操作
2021/06/26 Python
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫