jst*_*er7 3 arguments web-crawler scrapy
我遵循这两篇文章的建议,因为我也在尝试创建一个通用的scrapy蜘蛛:
但我得到一个错误,我应该作为参数传递的变量没有定义.我在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
Run Code Online (Sandbox Code Playgroud)
这是我的命令行:
scrapy crawl woz -a domains="http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
Run Code Online (Sandbox Code Playgroud)
这是错误:
NameError: name 'domains' is not defined
Run Code Online (Sandbox Code Playgroud)
你应该super(companySpider, self).__init__(*args, **kwargs)在你的开头打电话__init__.
def __init__(self, domains="", *args, **kwargs):
super(companySpider, self).__init__(*args, **kwargs)
self.domains = domains
Run Code Online (Sandbox Code Playgroud)
在你的第一个请求依赖于蜘蛛参数的情况下,我通常只做覆盖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):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |