scrapy python typeerror位置参数

问题描述 投票:0回答:1

这是我的第一个刮scrap项目,目的是刮this此页面“ http://books.toscrape.com/”。

页面包含书籍的多个链接。

想法是刮掉书的标题。

这里是代码:

import scrapy


class SpiderSpider(scrapy.Spider):
    name = 'spider'
    allowed_domains = ['http://books.toscrape.com/']
    start_urls = ['http://http://books.toscrape.com//']

    def parse(self, response):
        all_books = response.xpath('//article')
        for book in all_books:
            title = book.xpath('.//h3/a/@title').extract()
            print(title)


SpiderSpider().parse()

这里是错误:

Traceback (most recent call last):

 File "C:/Users/Sayed/PycharmProjects/books/books/spiders/spider.py", line 17, in <module>
    SpiderSpider().parse()

TypeError: parse() missing 1 required positional argument: 'response
python scrapy
1个回答
1
投票

我发现您的代码中有两个错误:

  1. 您缺少__init__类中的scrappy.Spider功能
  2. 据我所知,您不应该这样称呼您的蜘蛛SpiderSpider().parse,执行此操作的方法是运行:
$ scrapy crawl [yourSpiderName]

对于这种情况:

$ scrapy crawl spider

执行此操作时,请确保您与scrapy.cfg文件位于相同的文件夹路径。

首先,您的蜘蛛代码的正确方法是:

import scrapy

class SpiderSpider(scrapy.Spider):
    name = 'spider'
    def __init__(self, *args, **kwargs):
        super(SpiderSpider,self).__init__(*args, **kwargs)
        self.allowed_domains = ['http://books.toscrape.com/']
        self.start_urls = ['http://http://books.toscrape.com//']

    def parse(self, response):
        all_books = response.xpath('//article')
        for book in all_books:
            title = book.xpath('.//h3/a/@title').extract()
            print(title)

希望这一点指向正确的方向。另外,我不知道您是如何创建这个scrapy项目的,但是scrapy已经随您的项目一起提供了模板,从而使开发快速可靠的解决方案变得更加容易。要创建项目模板,请使用:

$ scrapy startproject [NameOfYourProject]

要生成新的蜘蛛,请执行以下操作:

$ cd [NameOfYourProject]
$ scrapy genspider [yourSpiderName]

请随时询问您是否有任何疑问! :D


0
投票

您使用以下命令执行脚本:

scrapy runspider <script_name>.py

(当然,您删除了最后一个您自己叫parse的行之后]

© www.soinside.com 2019 - 2024. All rights reserved.