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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
python实现贪吃蛇游戏
Mar 21 Python
Python后台管理员管理前台会员信息的讲解
Jan 28 Python
详解Python循环作用域与闭包
Mar 21 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python中seaborn包常用图形使用详解
Nov 25 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
python3读取文件指定行的三种方法
May 24 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
Python实现partial改变方法默认参数
2014/08/18 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
分析Python中解析构建数据知识
2018/01/20 Python
深入理解Django的中间件middleware
2018/03/14 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
《太阳》教学反思
2014/02/21 职场文书
大学生个人求职信
2014/06/02 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
关于JavaScript轮播图的实现
2021/11/20 Javascript
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android