Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮板找不到页面_Python_Scrapy - Fatal编程技术网

Python 刮板找不到页面

Python 刮板找不到页面,python,scrapy,Python,Scrapy,我有一个如下所示的spider,但它似乎没有到达函数parse。如果我遗漏了什么,能不能有人快速看一下让我知道。我是否正确实现了SgmlLinkExtractor 蜘蛛应该从左侧边栏中挑出所有链接,从中创建一个请求,然后解析下一页的facebook链接。它还应该对SgmlLinkExtractor中指定的其他页面执行此操作。此时,爬行器正在运行,但没有解析任何页面 class PrinzSpider(CrawlSpider): name = "prinz" allowed_dom

我有一个如下所示的spider,但它似乎没有到达函数
parse
。如果我遗漏了什么,能不能有人快速看一下让我知道。我是否正确实现了SgmlLinkExtractor

蜘蛛应该从左侧边栏中挑出所有链接,从中创建一个请求,然后解析下一页的facebook链接。它还应该对SgmlLinkExtractor中指定的其他页面执行此操作。此时,爬行器正在运行,但没有解析任何页面

class PrinzSpider(CrawlSpider):
    name = "prinz"
    allowed_domains = ["prinzwilly.de"]
    start_urls = ["http://www.prinzwilly.de/"]

    rules = (
        Rule(
            SgmlLinkExtractor(
                allow=(r'veranstaltungen-(.*)', ),
            ),
            callback='parse'
            ),
        )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        startlinks = hxs.select("//ul[@id='mainNav2']/li/a")
        print startlinks
        for link in startlinks:
            giglink = link.select('@href').extract()
            item = GigItem()
            item['gig_link'] = giglink
            request = Request(item['gig_link'], callback='parse_gig_page')
            item.meta['item'] = item
            yield request

    def parse_gig_page(self, response):
        hxs = HtmlXPathSelector(response)
        item = response.meta['item']
        gig_content = hxs.select("//div[@class='n']/table/tbody").extract()
        fb_link = re.findall(r'(?:www.facebook.com/)(.*)', gig_content)
        print '********** FB LINK ********', fb_link
        return item
编辑**

settings.py

BOT_NAME = 'gigscraper'

SPIDER_MODULES = ['gigscraper.spiders']
NEWSPIDER_MODULE = 'gigscraper.spiders'

ITEM_PIPLINES = ['gigscraper.pipelines.GigscraperPipeline']
from scrapy.item import Item, Field

class GigItem(Item):
    gig_link = Field()
class GigscraperPipeline(object):
    def process_item(self, item, spider):
        print 'here I am in the pipeline'
        return item
items.py

BOT_NAME = 'gigscraper'

SPIDER_MODULES = ['gigscraper.spiders']
NEWSPIDER_MODULE = 'gigscraper.spiders'

ITEM_PIPLINES = ['gigscraper.pipelines.GigscraperPipeline']
from scrapy.item import Item, Field

class GigItem(Item):
    gig_link = Field()
class GigscraperPipeline(object):
    def process_item(self, item, spider):
        print 'here I am in the pipeline'
        return item
pipelines.py

BOT_NAME = 'gigscraper'

SPIDER_MODULES = ['gigscraper.spiders']
NEWSPIDER_MODULE = 'gigscraper.spiders'

ITEM_PIPLINES = ['gigscraper.pipelines.GigscraperPipeline']
from scrapy.item import Item, Field

class GigItem(Item):
    gig_link = Field()
class GigscraperPipeline(object):
    def process_item(self, item, spider):
        print 'here I am in the pipeline'
        return item
两个问题:

  • extract()
    返回一个列表,您缺少
    [0]
  • 请求的回调不应是字符串,请使用
    self.parse\u gig\u页面
以下是修改后的代码(工作):


希望能有所帮助。

谢谢你的回复,但我还是一无所获。我没有收到打印的报表。。。没有什么。似乎找不到第一个url。@puffin这很奇怪,它适合我。这是一个小项目的一部分吗?如果是,则显示您的设置(编辑问题并粘贴到那里)。使用
CrawlSpider
时,应避免覆盖
parse()
方法。看见将其重命名为
parse_page()
或something@pault谢谢你,保罗。我已经试过了,但仍然在解析0页。@puffin,我把这些碎片文件放在Cloud9IDE上了。查看:查看
scrapy_教程/gigsrapper
;它包含@alecxe建议,我将
parse
重命名为
parse\u页面
,以遵循良好实践。蜘蛛跑得很好,收集了39件物品。(在底部的终端中,
cd gigsrapper/;scrapy crawl prinz