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基础教程之自定义函数介绍
Aug 29 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
在Python的Django框架的视图中使用Session的方法
Jul 23 Python
Python实现的Excel文件读写类
Jul 30 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
AUC计算方法与Python实现代码
Feb 28 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
python如何进行基准测试
Apr 26 Python
Python实现Hash算法
Mar 18 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
Chrome Web App开发小结
2014/09/04 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
python实现微信小程序自动回复
2018/09/10 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
如何编写python的daemon程序
2021/01/07 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
财产公证书
2014/04/10 职场文书
党日活动总结
2014/05/07 职场文书
社区元宵节活动总结
2015/02/06 职场文书
团员自我评价范文
2015/03/10 职场文书
校运会新闻稿
2015/07/17 职场文书