python爬虫框架之scrapy的快速上手 二

scrapy快速上手之crawl模板

前面提到过,我们使用了basic作为模板生成了爬虫
现在介绍另外一种模板:crawl

创建项目

首先在命令行界面执行:
scrapy startproject Spider
后,即可得到提示

You can start your first spider with:
cd Spider
scrapy genspider example example.com

然后,根据提示在命令继续输入cd Spider
这样,我们就来到了所创建爬虫的工作目录下
前面已经介绍过scrapy genspider example example.com
是使用basic模板来创建爬虫文件的
所以,为了使用crawl模板来创建爬虫文件,需要使用
scrapy genspider -t crawl example example.com
执行完毕后,可以得到如下提示:

Created spider 'example' using template 'crawl' in module:
Spider.spiders.example

至此,我们成功创建了用crawl模板生成的爬虫project

我们得到的文件目录结构如下:

Spider
    spiders
        _init_.py
        example.py
    _init_.py
    items.py
    middleswares.py
    pipelines.py
    settings.py
scrapy.cfg

这些文件分别是:

  • scrapy.cfg:项目配置的文件
  • Spider:该项目的python模块,该文件夹的名字为startproject命令指定的名字
  • items.py:项目的item文件
  • pipilines.py:项目的管道文件
  • settings.py:项目的设置文件
  • spiders:放置爬虫代码的文件
  • spiders/example.py:爬虫文件

example.py

不同的模板生成的example.py是不一样的,这是crawl模板生成的example.py

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

class ExampleSpider(CrawlSpider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/']

    rules = (
        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        item = {}
        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
        #item['name'] = response.xpath('//div[@id="name"]').get()
        #item['description'] = response.xpath('//div[@id="description"]').get()
        return item

以上内容就是我们利用crawl模板生成的爬虫文件,可以看到这与使用basic模板生成的爬虫文件的差别还是挺大的
首先ExampleSpider类继承于CrawlSpider,而使用basic模板生成的ExampleSpider类继承于Spider类
但还是有一些相同之处,例如name、allowed_domains和start_urls代表的含义都是一样的,即:
name为爬虫的名字,allow_domains指定要爬取的网址,start_url指定从哪个url开始爬取。

ExampleSpider类里还多了一个属性:rules。这个rules属性的作用是什么呢?
要想明白这个我们首先需要知道CrawlSpider是如何工作的
首先,CrawlSpider继承于Spider
在Spider中,在爬虫启动后会对start_url中给出的url发起请求,然后将得到的结果给parse函数进行解析
这个parse函数需要我们自己根据需求进行编写
而在CrawlSpider中,同样的也会对start_url中给出的url发起请求,然后将得到的结果给parse函数进行解析
所不同的是CrawlSpider类为了实现本身的爬取逻辑,自己定义了parse函数
换句话说,parse已经被实现了,我们也不能轻易更改,否则CrawlSpider运行会出错

那么CrawlSpider的爬取逻辑是什么呢?
举个例子来说,假设start_urls存储是某个网站的首页链接,那么启动爬虫时将根据该链接生成Request请求
正常情况下,Request请求将返回Response对象,即网页内容,然后使用CrawlSpider定义的parse函数进行解析
该函树解析的主要目的是提取出用户感兴趣的链接,并沿着该链接爬取下去,直到爬取整个网站或者爬取的链接已不在指定的域名
那么怎么知道用户感兴趣的链接呢?用户感兴趣的只有用户知道,于是便有了rules这个属性
用户感兴趣的链接将以正则表达式的形式定义在rules属性的LinkExtractor中

rules是一个包含了一个或者多个Rule对象的集合,Rule里面有三个参数:

  • LinkExtractor定义如何从爬取到的页面提取链接,通过定义正则表达式的方法来提取链接
  • callback:指定一个回调函数,从LinkExtractor中每获取到链接时就会调用该函数,该函数接受LinkExtractor的链接的响应作为第一个参数
  • follow:指定了从response提取的链接是否需要跟进。如果callback为None,follow 默认设置为True,否则默认为False

因此,示例中的rules可解释为:
提取匹配 ‘Items/‘ 的链接并使用parse_item方法对请求匹配到的链接后得到的响应进行分析
此外还会对得到的响应的链接进行跟进

小例子:新浪新闻的爬取

这里我们简单列举一个爬取新浪新闻的例子
将新浪新闻的首页https://news.sina.com.cn/作为入口
沿着该链接进行爬取,我们感兴趣的链接为:news.sina.com.cn
于是CrawlSpider的属性被定义为:

name = 'sina'
allowed_domains = ['sina.com.cn']
start_urls = ['https://news.sina.com.cn/']

rules = (
    Rule(LinkExtractor(allow=r'news.sina.com.cn'), callback='parse_item', follow=True),
)

同时为了方便处理,我们对返回的response只将标题提取出来,parse_item方法定义如下:

def parse_item(self, response):
item = {}
item['title'] = response.xpath('//title/text()').extract()[0]
return item

现在我们的工作就完成了,它将沿着新浪新闻首页的包含有“news.sina.com.cn”的链接爬取下去
最后启动爬虫:scrapy crawl sina

运行结果


代码

代码非常简单,github

原文地址:https://www.cnblogs.com/ASE265/p/12363843.html

时间: 2024-11-08 12:45:10

python爬虫框架之scrapy的快速上手 二的相关文章

爬虫框架之Scrapy

爬虫框架之Scrapy 一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowloader Middeware 十.Sider Middlewear 十一.自定义扩展 十二.setitings.py 十三.获取亚马逊商品信息 一.介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于

python爬虫----(2. scrapy框架)

Scrapy框架,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 刚开始学习这个框架.不太好评论.只是感觉这个框架有些Java的感觉,需要太多的其他模块的支持. (一)创建 scrapy 项目 # 使用 scrapy startproject scrapy_test ├── scrapy_test │   ├── scrapy.cfg │   └── scrapy_test │

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

python爬虫----(4. scrapy框架,官方文档以及例子)

官方文档: http://doc.scrapy.org/en/latest/ github例子: https://github.com/search?utf8=%E2%9C%93&q=scrapy 剩下的待会再整理...... 买饭去......       --2014年08月20日19:29:20 python爬虫----(4. scrapy框架,官方文档以及例子)

零基础写python爬虫之使用Scrapy框架编写爬虫

网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便.使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Item

python爬虫----(5. scrapy框架,综合应用及其他)

在分析和处理选择内容时,还需注意页面的JS可能会修改DOM树结构. (一)GitHub的使用 由于之前使用Win,没使用过shell的.目前只是了解.以后再补充.找到几个不错的教程 GitHub超详细图文攻略 http://blog.csdn.net/vipzjyno1/article/details/22098621 Github修改提交 http://www.360doc.com/content/12/0602/16/2660674_215429880.shtml 以后再补充!!!!! (二

Python爬虫进阶之Scrapy框架安装配置

Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/latest/intro/install.html,最权威哒,下面是我的亲身体验过程. 1