gpt4 book ai didi

arguments - 将参数传递给 scrapy

转载 作者:行者123 更新时间:2023-12-01 10:52:13 25 4
gpt4 key购买 nike

我遵循了这两个帖子的建议,因为我也在尝试创建一个通用的 scrapy 蜘蛛:

How to pass a user defined argument in scrapy spider

Creating a generic scrapy spider

但是我得到一个错误,我应该作为参数传递的变量没有定义。我是否在我的 init 方法中遗漏了什么?

代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from data.items import DataItem

class companySpider(BaseSpider):
name = "woz"

def __init__(self, domains=""):
'''
domains is a string
'''
self.domains = domains

deny_domains = [""]
start_urls = [domains]

def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('/html')
items = []
for site in sites:
item = DataItem()
item['text'] = site.select('text()').extract()
items.append(item)
return items

这是我的命令行:

scrapy crawl woz -a domains="http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

这里是错误:

NameError: name 'domains' is not defined

最佳答案

您应该在 __init__ 的开头调用 super(companySpider, self).__init__(*args, **kwargs)

def __init__(self, domains="", *args, **kwargs):
super(companySpider, self).__init__(*args, **kwargs)
self.domains = domains

在您的第一个请求取决于蜘蛛参数的情况下,我通常只覆盖 start_requests() 方法,而不覆盖 __init__()。来自命令行的参数名称可以作为蜘蛛的属性使用:

class companySpider(BaseSpider):
name = "woz"
deny_domains = [""]

def start_requests(self):
yield Request(self.domains) # for example if domains is a single URL

def parse(self, response):
...

关于arguments - 将参数传递给 scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com