python Scrapy框架原理解析


Posted in Python onJanuary 04, 2021

Python 爬虫包含两个重要的部分:正则表达式和Scrapy框架的运用, 正则表达式对于所有语言都是通用的,网络上可以找到各种资源。

如下是手绘Scrapy框架原理图,帮助理解

python Scrapy框架原理解析

如下是一段运用Scrapy创建的spider:使用了内置的crawl模板,以利用Scrapy库的CrawlSpider。相对于简单的爬取爬虫来说,Scrapy的CrawlSpider拥有一些网络爬取时可用的特殊属性和方法:

$ scrapy genspider country_or_district example.python-scrapying.com--template=crawl

运行genspider命令后,下面的代码将会在example/spiders/country_or_district.py中自动生成。

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from example.items import CountryOrDistrictItem


class CountryOrDistrictSpider(CrawlSpider):
  name = 'country_or_district'
  allowed_domains = ['example.python-scraping.com']
  start_urls = ['http://example.python-scraping.com/']

  rules = (
    Rule(LinkExtractor(allow=r'/index/', deny=r'/user/'),
       follow=True),
    Rule(LinkExtractor(allow=r'/view/', deny=r'/user/'),
       callback='parse_item'),
  )

  def parse_item(self, response):
    item = CountryOrDistrictItem()
    name_css = 'tr#places_country_or_district__row td.w2p_fw::text'
    item['name'] = response.css(name_css).extract()
    pop_xpath = '//tr[@id="places_population__row"]/td[@class="w2p_fw"]/text()'
    item['population'] = response.xpath(pop_xpath).extract()
    return item

爬虫类包括的属性:

  • name: 识别爬虫的字符串。
  • allowed_domains: 可以爬取的域名列表。如果没有设置该属性,则表示可以爬取任何域名。
  • start_urls: 爬虫起始URL列表。
  • rules: 该属性为一个通过正则表达式定义的Rule对象元组,用于告知爬虫需要跟踪哪些链接以及哪些链接包含抓取的有用内容。

以上就是python Scrapy框架原理解析的详细内容,更多关于Scrapy框架原理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
django 连接数据库 sqlite的例子
Aug 14 Python
Python的垃圾回收机制详解
Aug 28 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python多线程 Queue 模块常见用法
Jul 04 Python
如何用 Python 处理不平衡数据集
Jan 04 #Python
Python创建简单的神经网络实例讲解
Jan 04 #Python
python实现跨年表白神器--你值得拥有
Jan 04 #Python
Python列表元素删除和remove()方法详解
Jan 04 #Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 #Python
关于python中remove的一些坑小结
Jan 04 #Python
python中remove函数的踩坑记录
Jan 04 #Python
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
总经理任命书
2014/03/29 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
Python制作动态字符画的源码
2021/08/04 Python
vue ref如何获取子组件属性值
2022/03/31 Vue.js
MySQL普通表如何转换成分区表
2022/05/30 MySQL