Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 爬行蜘蛛罐';在Scrapy中不解析多页_Python_Scrapy - Fatal编程技术网

Python 爬行蜘蛛罐';在Scrapy中不解析多页

Python 爬行蜘蛛罐';在Scrapy中不解析多页,python,scrapy,Python,Scrapy,我创建的爬行蜘蛛工作不正常。它解析第一页,然后停止,而不继续下一页。我做错了,但无法察觉。希望有人能给我一个提示,我该怎么做才能纠正它 “items.py”包括: from scrapy.item import Item, Field class CraigslistScraperItem(Item): Name = Field() Link = Field() 爬行蜘蛛名称为“craigs.py”,其中包含: from scrapy.contrib.spiders impor

我创建的爬行蜘蛛工作不正常。它解析第一页,然后停止,而不继续下一页。我做错了,但无法察觉。希望有人能给我一个提示,我该怎么做才能纠正它

“items.py”包括:

from scrapy.item import Item, Field
class CraigslistScraperItem(Item):
    Name = Field()
    Link = Field()
爬行蜘蛛名称为“craigs.py”,其中包含:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from craigslist_scraper.items import CraigslistScraperItem

class CraigsPySpider(CrawlSpider):
    name = "craigs"
    allowed_domains = ["craigslist.org"]
    start_urls = (
        'http://sfbay.craigslist.org/search/npo/',
    )
    rules=(Rule(LinkExtractor(allow = ('sfbay\.craigslist\.org\/search\/npo/.*',
    ),restrict_xpaths = ('//a[@class="button next"]')),callback = 'parse',follow = True),)
    def parse(self, response):
        page=response.xpath('//p[@class="result-info"]')
        items=[]
        for title in page:
            item=CraigslistScraperItem()
            item["Name"]=title.xpath('.//a[@class="result-title hdrlnk"]/text()').extract()
            item["Link"]=title.xpath('.//a[@class="result-title hdrlnk"]/@href').extract()
            items.append(item)
        return items
最后,我用来获取CSV输出的命令是:

scrapy crawl craigs -o items.csv -t csv

顺便说一句,我首先尝试使用“parse_item”,但没有找到响应,这就是为什么我使用了“parse”方法。提前感谢。

使用scrapy.CrawlSpider时,不要命名回调方法
parse
。 来自Scrapy:

在编写爬网爬行器规则时,避免使用解析作为回调,因为 爬行爬行器使用解析方法本身来实现其逻辑。 因此,如果重写解析方法,爬网爬行器将不再 工作

此外,您不需要将项目附加到列表中,因为您已经在使用并且可以简单地生成项目。 此代码应适用于:

# -*- coding: utf-8 -*-
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from craigslist_scraper.items import CraigslistScraperItem


class CraigsPySpider(CrawlSpider):
    name = "craigs"
    allowed_domains = ["craigslist.org"]
    start_urls = (
        'http://sfbay.craigslist.org/search/npo/',
    )
    rules = (
        Rule(LinkExtractor(allow=('\/search\/npo\?s=.*',)), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        page = response.xpath('//p[@class="result-info"]')
        for title in page:
            item = CraigslistScraperItem()
            item["Name"] = title.xpath('.//a[@class="result-title hdrlnk"]/text()').extract_first()
            item["Link"] = title.xpath('.//a[@class="result-title hdrlnk"]/@href').extract_first()
            yield item

最后,要以csv格式输出,请运行:
scrapy crawl craigs-o items.csv

感谢无数的vold为您所做的甜蜜而富有成效的努力。它工作得非常好。你让我开心。顺便说一下,有两件事我想得到更新。它是如何单击下一页按钮的,因为您没有使用“restrict\u xpaths”选项,第二个结果是每一行填充csv的。我的意思是,每个结果之间有一条线的距离。再次感谢。不客气!嗯,对我来说,使用
restrict xpaths
似乎是多余的,因为您已经在
allow
中指定了regex参数,这些参数只与next按钮中的url匹配(实际上是两个按钮,但并不相关)。获取完整信息。关于csv输出,我的结果看起来也像是如果你想保存完整的链接,你可以将代码修改为
link=title.xpath('.//a[@class=“result title hdrlnk”]/@href')。extract_first()item[“link”]=response.urljoin(link)
我正期待着你刚才所做的事情。再次感谢。