Scrapy 学习

本文介绍了如何安装Scrapy并在Windows环境下配置基本的爬虫项目。涵盖了创建项目、定义爬虫模型、爬虫逻辑实现及数据提取等核心内容。

Scrapy安装

在Windows cmd中输入命令:

pip install scrapy

就会自动下载安装Scrapy。等待安装完成就能使用。也可以在cmd中输入以下命令,来查看是否安装成功:

scrapy -h

这个命令将会列出可用的若干命令,主要包括:

startproject:创建一个新项目
genspider:根据模版生成一个新爬虫
crawl:执行爬虫
shell:启动交互式抓取控制台

方法

创建项目

必须创建一个新的Scrapy项目。具体方法:

进入打算存储代码的目录中,运行以下命令:

scrapy startproject project_name

其中,project_name可以替换成任何其他名字,作为项目的名称。这里,我们使用garnet作为项目的名字,则上面的命令则会创建garnet目录(文件夹),结构如下:

garnet/
    scrapy.cfg
    garnet/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py

各文件的作用如下:
scrapy.cfg项目的配置文件
garnet/项目的python模块,之后将在此加入新的代码
garnet/items.py项目中的item文件,该文件定义了待抓取域的模型
garnet/pipelines.py项目中的pipelines文件,处理要抓取的域
garnet/settings.py项目的设置文件,如用户代理,爬取延时等
garnet/spiders/放置spider代码的目录

定义模型(Item)

Item是保存爬取到的数据的容器。通过创建一个scrapy.Item,并使用scrapy.Field的类属性,来定义一个Item。例如,我们需要从网站获取标题和URL:

import scrapy

class GarnetItem(scrapy.Item):
    url = scrapy.Field()
创建爬虫

创建一个爬虫,需要继承scrapy.Spider

import scrapy

class GarnetSpider(scrapy.Spider):
    name = 'pc426'
    start_urls = ['http://www.pc426.com/']# 可以拥有多个起始URL,是一个list
    allowed_domains = ['pc426.com']

    def parse_item(self,response):
        pass

其中:
name定义爬虫的名字,该名字必须是唯一的;
start_url定义爬虫起始的URL列表;
allowed_domains定义了可爬取的域名列表,如果没有定义该属性,则表示可以爬取任何域名
parse_item()是spider的一个方法,被调用时每个初始URL下载完后生成的response作为参数传递给该函数。该方法负责解析返回的数据。

或者使用genspider命令:

scrapy genspider pc426 www.pc426.com --template=crawl

其中,pc426为模版名。运行该命令后,与上面类似的代码就会生成在garnet/spiders/pc426.py中自动生成。

测试爬虫
scrapy crawl pc426

则会启动名为pc426的爬虫。
过程:

1.Scrapy为Spider的start_urls属性中的每个URL创建了scrapy.Request对象,并将parse_item方法作为回调函数(callback)赋值给了Request。
2.Request对象经过调度,执行生成scrapy.http.Response对象并送回给spiderparse_item()方法。

提取Item
Selectors选择器

Scrapy使用了一种基于 XPath 和 CSS 表达式机制: Scrapy Selectors
Selector有四个基本的方法:

xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。

在Shell中使用Selector选择器

进入项目的根目录,执行下列命令来启动shell,将会进入IPython:

scrapy shell "http://www.pc426.com/"

shell输出如下:

载入shell后,将会得到一个response变量。输入:

response.body得到response的内容;
response.header得到response的头信息;
response.selector得到一个可用于查询返回数据的selector(选择器)。
该选择器包含的主要方法有:
response.xpath()response.css(),等价于response.selector.xpath()response.selector.css()

使用item

Item对象是自定义的python字典。可以使用标准的字典语法来获取到其每个字段的值(字段即是我们之前在items.py用Field赋值的属性)。

item = MyItem()
item['url'] = 'example string'
综合

一般来说,Spider将会将爬取到的数据以 Item 对象返回。所以为了将爬取的数据返回,我们最终的代码将是(garnet/spiders/pc426.py中的内容):

import scrapy
from garnet.items import GarnetItem

class Pc426Spider(scrapy.Spider):
    name = 'pc426'
    start_urls = ['http://www.pc426.com/']# 可以拥有多个起始URL,是一个list
    allowed_domains = ['pc426.com']

    def parse_item(self,response):
        for sel in response.xpath('//ul/li/a/@href').extract():
            item() = GarnetItem()
            item['url'] = sel
保存爬取到的数据
scrapy crawl dmoz -o items.json

该命令将采用 JSON 格式对爬取的数据进行序列化,生成items.json文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值