Scrapy 的 Spider 的编写

当然,我们也可以自己写 .py 文件,不过,下面我们要介绍使用 Scrapy 的模板来生成爬虫文件的方法。

在 iTerm2 中输入:

scrapy genspider iqianyue http://iqianyue.com/

这里写图片描述

从上图中,我们可以看到,默认,使用模板 “basic” 创建了 spider “iqianyue”,程序在 spiders 文件夹下就生成了模板文件:

# -*- coding: utf-8 -*-
import scrapy

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

    def parse(self, response):
        pass

下面,我们对爬虫的文件修改如下:

# -*- coding: utf-8 -*-
import scrapy

from douban.items import MyFirstItem

class IqianyueSpider(scrapy.Spider):
    name = "iqianyue"
    allowed_domains = ["http://iqianyue.com/"]
    start_urls = ['http://www.iqianyue.com/articles/423525e6',
                  'http://www.iqianyue.com/articles/43c364c8',
                  'http://www.iqianyue.com/articles/3601e6c2']

    def parse(self, response):
        item = MyFirstItem()
        item["urlname"] = response.xpath("/html/head/title/text()")
        print(item["urlname"])

同时,对 items.py 文件添加:

class MyFirstItem(scrapy.Item):
    urlname = scrapy.Field()
    urlkey = scrapy.Field()
    urlcr = scrapy.Field()
    urladdr = scrapy.Field()

然后执行命令:

scrapy crawl iqianyue --nolog

说明:crawl 就是开始爬取的意思,“iqianyue” 是 IqianyueSpider 中 name 属性的值。

这里写图片描述


下面,我们回答一个问题:为什么定义了 start_urls 属性,就默认定义了起始的网址呢?
我们看一看 scrapy.Spider 这个类的源代码就知道了。

这里写图片描述

下面我们就知道如何重写这个方法了,示例代码如下:

# -*- coding: utf-8 -*-
import scrapy

from douban.items import MyFirstItem

class IqianyueSpider(scrapy.Spider):
    name = "iqianyue"
    allowed_domains = ["http://iqianyue.com/"]
    start_urls = ['http://www.iqianyue.com/articles/423525e6',
                  'http://www.iqianyue.com/articles/43c364c8',
                  'http://www.iqianyue.com/articles/3601e6c2']

    # 第 1 步:定义了新的属性
    custom_urls = ("https://www.jd.com/",
                  "http://www.sina.com.cn/",
                  "http://www.163.com/")

    # 第 2 步:重写了 start_requests() 方法
    def start_requests(self):
        # 在该方法中将起始网址设置从新属性 url2 中读取
        for url in self.custom_urls:
            # 第 3 步:调用了默认的 make_requests_from_url()
            # 方法生成了具体请求,并通过 yield 返回
            yield self.make_requests_from_url(url)

    def parse(self, response):
        item = MyFirstItem()
        item["urlname"] = response.xpath("/html/head/title/text()")
        print(item["urlname"])

再执行一遍,就可以看到,我们的爬虫,从我们自定义的 “custom_urls” 这些链接的集合开始爬取数据。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遇到 `ModuleNotFoundError: No module named 'scrapyspider'` 这种错误通常是Python中尝试导入一个不存在的模块导致的。这个错误意味着你在代码中引用了一个名为 'scrapyspider' 的模块,但Python解释器找不到它。 为了解决这个问题,你可以按照以下步骤操作: 1. **检查拼写和大小写**:确保你输入的模块名 (`scrapyspider`) 在文件和导入语句中的拼写和大小写完全一致,因为Python是区分大小写的。 2. **安装模块**:如果你需要使用外部模块,确保已经通过pip安装了。在命令行或终端中运行 `pip install scrapyspider`(如果该模块存在)。如果模块名字有误,请替换为正确的包名。 3. **添加到sys.path**:如果模块在项目的其他位置,可能需要将那个路径添加到sys.path中,这样Python就能找到它。在你的程序开始处添加类似这样的代码: ```python import sys sys.path.append('/path/to/module') # 将你的模块目录替换为实际路径 ``` 4. **更新依赖**:如果你的项目使用了包管理工具(如virtualenv、conda或poetry),确保所有依赖都已更新并激活。 5. **检查版本冲突**:有时候,两个不同版本的库可能会导致相同名称的模块冲突,检查是否有这种情况并选择合适的版本。 6. **检查源码或仓库**:如果模块是你自己编写的,确认模块文件是否存在,并且在预期的路径下。 相关问题: 1. 什么是Python的sys.path,为什么在这里很重要? 2. 如何查看已经安装的Python模块? 3. 如果模块是自定义的,如何确保Python能够正确加载?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值