Scrapy——安装及使用

安装

目前只支持python2

pip install Scrapy

升级Scrapy

pip install --upgrade Scrapy

UR²IM——基本抓取流程

和Scrapy打交道时,你所遵循得最通用的流程是UR²IM流程。
这里写图片描述

创建项目

进入你想保存项目的目录

scrapy startproject tutorial
tutorial/
├── scrapy.cfg   #项目的配置文件
└── tutorial    #项目的python文件
    ├── __init__.py 
    ├── items.py #项目中的item文件
    ├── middlewares.py
    ├── pipelines.py #pipelines文件
    ├── settings.py #设置文件
    └── spiders #防止spider代码的目录
        └── __init__.py

定义Item
Item是保存爬取到的数据的容器;其使用方法和python字典类似,并且提供额外保护机制来避免拼写错误导致的为定义字段错误。类似ORM中作的一样。
首先根据需要从dmoz.org获取到的数据对item进行建模,需要从dmoz中获取名字,url以及网站的描述。
tutorial/items.py

class DmozItem(scrapy.Item):
    title=scrapy.Field()
    link=scrapy.Field()
    desc=scrapy.Field()

编写第一个爬虫
Spider使用户编写用于从单个网站爬取的类。
其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容,提取生成的item的方法。
创建Spider

  • name:用于区别Spider,该名字唯一。
  • start_urls:包含了Spider在启动时进行爬取的url列表。
  • parse()是spider得一个方法。被调用时,每个初始URL完成下载后生成的Response对象将会作为为以参数传递给该函数。该方法负责解析返回的数据,提取数据以及生成需要进一步处理的URL的Request对象。

tutorail/spiders.dmoz_spider.py

import scrapy


class DomzSpider(scrapy.Spider):

    name="dmoz"
    allowed_domains=["dmoz.org"]
    start_urls=[
        "http://exanple.com/"
    ]

    def parse(self, response):
        filename=response.url.split("/")[-2]
        with open(filename,'wb') as f:
            f.write(response.body)

并且生成url所对应的内容的文件被创建。
原理:Scrapy为Spider的start_urls属性中的每个URL创建了scrapy.Request对象,并将parse方法作为会掉函数故只给Request。
Request对象经调度,执行生成scrapy.http.Response对象并返回给spider.parse()方法。
Selectors选择器简介
从网页中提取数据有很多种方法。Scrapy使用了一种基于XPath和CSS表达机制:Scrapy Selectors。
Selector有四种基本方法:

  • xpath():传入xpath表达式,返回该表达式所对应的所有节点的selecor list 列表;
  • css():传入CSS表达式,返回该表达式所对应的所有节点的selector list列表;
  • extract():序列化该节点为unicode字符串并返回list;
  • re():根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
    使用Selector选择器
    使用内置的Scrapy shell,需要已安装好的IPython。
pip install ipython --user
scrapy shell "http://example1.com"

当shell载入之后,你将得到一个包含response的数据的本地response变量。输入response.body将会得到response的包体,输入response.head将会得到包头。
输入response.selector时,将获取到一个可以用于查询返回数据的selector选择器。以及映射到 response.selector.xpath() 、 response.selector.css() 的 快捷方法(shortcut): response.xpath() 和 response.css() 。

In [2]: response.xpath('//title')
Out[2]: [<Selector xpath='//title' data=u'<title>Example 1</title>'>]

In [3]: response.xpath('//title').extract()
Out[3]: [u'<title>Example 1</title>']

In [4]: response.xpath('//title/text()')
Out[4]: [<Selector xpath='//title/text()' data=u'Example 1'>]

In [5]: response.xpath('//title/text()').extract()
Out[5]: [u'Example 1']
In [3]: response.xpath('//title').extract()
Out[3]: [u'<title>Example 1</title>']

In [4]: response.xpath('//title/text()')
Out[4]: [<Selector xpath='//title/text()' data=u'Example 1'>]

In [7]: response.xpath('//title/text()').re('(\w+)')
Out[7]: [u'Example', u'1']

猜你喜欢

转载自blog.csdn.net/mashaokang1314/article/details/82705117