Scrapy爬虫开发步骤总结

准备阶段

注:项目需要的所有指令均在cmd终端窗口或者shell终端键入。

一、输入指令scrapy startproject project_name创建scrapy项目

此命令会在当前路径下创建一个指定的项目,并在项目文件目录中生成scrapy爬虫需要的各个py文件,包括items.py、piplines.py、settings.py等。

二、输入指令scrapy genspider spider_name http://example/com生成爬虫文件

此命令会在spider_name.py建立对应的Spider类并生成parse方法以及需要用到的常用变量(最常用的是response),之后便能在parse方法中编写代码

三、在终端命令窗口运行scrapy shell http://example.com命令。

此命令将得到网站对应的Response对象和Request对象并进入Python的执行环境。

此外该命令下还有几个常用的函数:

    fetch(req_or_url):用于下载页面,可传入一个Request对象或url字符串,调用后会更新变量request和response;

    view(response):该函数会打开爬虫下载的页面并在浏览器中显示;

四、经过第三步之后便可以使用其获得的Response对象进行页面数据的解析提取,用response.xpath(),或者response.css(),如前所述,我们可以使用fetch方法来获取新的页面的Response和Request对象。

在这里介绍XPath和CSS用法。

4.1 Xpath常用基本语法

4.2 CSS常用基本语法

编码实现阶段

一、在items.py中封装需要爬取的各个字段

import scrapy


class ExampleItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    value = scrapy.Field()
    

二、(如果需要)在piplines.py中建立ExamplePipline类并实现process_item(self, item, spider),然后添加到settings.py中

用来处理爬取到的每个Item,在piplines.py中可以有多个Pipline类。

class Example1Pipeline(object):
    def process_item(self, item, spider):
        pass


class Example2Pipeline(object):
    def process_item(self, item, spider):
        pass

之后需要在settings.py中添加piplines.py中建立的各个类,准确的说是将想要启动的Item Pipline添加到ITEM_PIPLINES字典中,其中每一项的键是每一个Item Pipline类的导入路径,只是一个0~1000的数字,同时启用多个Item Pipline时,Scrapy根据这些数值按从小到大的顺序决定各Item Pipline处理次序。

FEED_EXPORT_FIELDS = ['item1', 'item2']
ITEM_PIPELINES = {
                    'example.pipelines.Example1Pipeline': 300,
                    'example.pipelines.Example2Pipeline': 350,
                }
FEED_EXPORT_ENCODING = 'GBK'

三、继承Spider创建Spider类(在准备阶段键入命令已完成)

四、为Spider取名(在准备阶段键入命令已完成)

五、指定起始爬取点(在准备阶段键入命令已完成)

六、实现爬取页面的解析函数

在爬取一个网站时,若要爬取网页上到其他网页的链接,可使用Selector或者LinkExtractor。前者适用于提取少量链接或提取规则比较简单的情况,先使用xpath或者css选择器提取相对url,再调用response.urljoin方法计算绝对url地址;后者在提取大量链接或提取规则较为复杂时使用起来比较方便。

以下是一个简单例子,

import scrapy

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

    def parse(self, response):
        pass

    def parse_others(self, response):
        pass

start_urls是用来存放所有起始爬取点url的列表。我们可以在parse方法中实现页面的解析,如果需要进一步提取其他页面信息,可仿照parse方法再写一个parse方法进行其他页面的解析。

猜你喜欢

转载自blog.csdn.net/perfer258/article/details/81106286