python 爬虫(六) scrapy tutorial 1

今天开始scrapy的学习,环境 ubuntu 16.04 python3.5

1. 创建scrapy爬虫工程

     通过终端进入要放置爬虫的文件夹,在我的环境中 ~/PycharmProjects/ScrapyWord/tutorial

     使用命令:scrapy startproject tutorial

     会创建tutorial文件夹,在这个文件夹下面会包含相应的内容。

2. 创建第一个spider类

    在spiders文件夹下面可以添加一个名称为quotes_spider.py的文件,内容如下(其中有注释不做过多说明)

import scrapy

class Quotespider(scrapy.Spider):
    name = 'quotes'
    # spider的标识,使用name属性来区分不同的spider,不同的spider不能够拥有相同的名字属性
    def start_requests(self):
        # start_requests方法必须返回可迭代的Request对象,这个spider将这些对象作为起始初始化请求对象
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 在parse方法中每一个request请求发出之后会在这个方法中返回对应的response对象,
        # 这个response对象为textResponse对象,包含了界面的内容和其他一些处理的方法。
        # 在这个方法内部通常将数据分解为字典,还可以查找到新的url
        page = response.url.split("/")[-2]

        filename = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

3. 如何使spider运行起来

    在scrapy文档中使用  scrapy crawl quotes 命令来启动脚本,注意因该在脚本的top lelvel目录

    但是我使用的pycharm IDE,在spiders上一级目录创建main.py 

from scrapy import cmdline

cmdline.execute("scrapy crawl quotes".split())

4. 在返回的response中查找元素

    在parse方法中会返回response类型的对象。

    使用response.css方法会返回一个selectlist的对象,这个对象类似于一个列表。如果要获取内容使用extract方法

print(response.css('title').extract())

 如果要只获取text属性:

response.css('title::text').extract_first()

 除了extract和extract_first两个方法之外还有re()方法。

原文地址:https://www.cnblogs.com/someoneHan/p/6293325.html