我想用蜘蛛爬虫代码来获取一些房地产数据。但它一直给我这个错误:
回溯(最近一次呼叫最后一次):
文件“//anaconda/lib/python2.7/site packages/twisted/internet/defer.py”,第1301行,in_inlineCallbacks result=g.send(result)
文件“//anaconda/lib/python2.7/site packages/scrapy/crawler.py”,第90行,第六行。重新发布(*exc_信息)
文件“//anaconda/lib/python2.7/site packages/scrapy/crawler.py”,第71行,在crawl self中。蜘蛛=自我_创建_spider(*args,**kwargs)
file"//anaconda/lib/python2.7/site-pack/scrapy/crawler.py",第94行,_create_spider返回self.spidercls.from_crawler(自己,*args,**kwargs)
file"//anaconda/lib/python2.7/site-pack/scrapy/spiders/crawl.py",第96行,from_crawlerspider=Super(CrawlSpider, cls)。from_crawler(爬虫,*args,**kwargs)
文件“//anaconda/lib/python2.7/site packages/scrapy/spider/init.py”,第50行,from_crawler spider=cls(*args,**kwargs)
类型错误:init()正好需要3个参数(1个给定)
以下是定义爬虫程序的代码:
class RealestateSpider(scrapy.spiders.CrawlSpider):
###Real estate web crawler
name = 'buyrentsold'
allowed_domains = ['realestate.com.au']
def __init__(self, command, search):
search = re.sub(r'\s+', '+', re.sub(',+', '%2c', search)).lower()
url = '/{0}/in-{{0}}{{{{0}}}}/list-{{{{1}}}}'.format(command)
start_url = 'http://www.{0}{1}'
start_url = start_url.format(
self.allowed_domains[0], url.format(search)
)
self.start_urls = [start_url.format('', 1)]
extractor = scrapy.linkextractors.sgml.SgmlLinkExtractor(
allow=url.format(re.escape(search)).format('.*', '')
)
rule = scrapy.spiders.Rule(
extractor, callback='parse_items', follow=True
)
self.rules = [rule]
super(RealestateSpider, self).__init__()
def parse_items(self, response):
###Parse a page of real estate listings
hxs = scrapy.selector.HtmlXPathSelector(response)
for i in hxs.select('//div[contains(@class, "listingInfo")]'):
item = RealestateItem()
path = 'div[contains(@class, "propertyStats")]//text()'
item['price'] = i.select(path).extract()
vcard = i.select('div[contains(@class, "vcard")]//a')
item['address'] = vcard.select('text()').extract()
url = vcard.select('@href').extract()
if len(url) == 1:
item['url'] = 'http://www.{0}{1}'.format(
self.allowed_domains[0], url[0]
)
features = i.select('dl')
for field in ('bed', 'bath', 'car'):
path = '(@class, "rui-icon-{0}")'.format(field)
path = 'dt[contains{0}]'.format(path)
path = '{0}/following-sibling::dd[1]'.format(path)
path = '{0}/text()'.format(path)
item[field] = features.select(path).extract() or 0
yield item
以下是erorr出现的时间:
crawler = scrapy.crawler.CrawlerProcess(scrapy.conf.settings)
sp=RealestateSpider(command, search)
crawler.crawl(sp)
crawler.start()
有人能帮我解决这个问题吗?谢谢!
我遇到了这个问题,上面的解决方案对我来说太难了
但是我通过将参数作为类属性传递来避开了这个问题:
process = CrawlerProcess()
sp = MySpider
sp.storage = reference_to_datastorage
process.crawl(sp)
process.start()
希望这是你问题的潜在解决方案。
crawler.crawl()
方法需要spider类作为参数,其中在代码中提供了一个spider对象。
有几种方法可以正确地做到这一点,但是最直接的方法是简单地扩展蜘蛛类:
class MySpider(Spider):
command = None
search = None
def __init__(self):
# do something with self.command and self.search
super(RealestateSpider, self).__init__()
然后:
crawler = scrapy.crawler.CrawlerProcess(scrapy.conf.settings)
class MySpider(RealestateSpider):
command = 'foo'
search = 'bar'
crawler.crawl(MySpider)
crawler.start()
我的查询是针对
嗨,我正在运行这个开源Ex-Crawler的罐子 但我总是收到这样的错误:og4j:WARN找不到记录器的追加器(eu.medsea.mimeutil.TextMimeDetector)。log4j:警告请正确初始化log4j系统。log4j:请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig更多信息
本文向大家介绍Python反爬虫伪装浏览器进行爬虫,包括了Python反爬虫伪装浏览器进行爬虫的使用技巧和注意事项,需要的朋友参考一下 对于爬虫中部分网站设置了请求次数过多后会封杀ip,现在模拟浏览器进行爬虫,也就是说让服务器认识到访问他的是真正的浏览器而不是机器操作 简单的直接添加请求头,将浏览器的信息在请求数据时传入: 打开浏览器--打开开发者模式--请求任意网站 如下图:找到请求的的名字,打
我有一个Json数组文件的格式:-[[{key1:value1},{key2:value2},{key3:value3}],[{key1:value4},{key2:value5},{key3:value6}]] 我需要使用AWS glue爬取上述文件,并读取json模式,其中每个键都作为模式中的一列。我尝试使用标准的json分类器,但它似乎不起作用,并且模式加载为数组。我需要从S3读取json文
我是nutch的初级用户。当我用bin/nutch抓取命令重新抓取时,我得到一个。锁定已经存在。 以下是我的例外。链接反转 /home/crawler_user/apache-nutch-1.14/bin/nutch invertlinks/data/crawlor_user/nutch/crawled-data/linkdb/data/crawle_user/nutch/crawled-data
我正试着测试这只痒痒的爬行蜘蛛,但我不明白它为什么不爬行。它应该做的是在wikipedia的数学页面上爬行一个深度级别,然后返回每个爬行页面的标题。我错过了什么?非常感谢您的帮助! 设置: 日志: