Python 刮擦爬行输出

Python 刮擦爬行输出,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,我遇到了一个问题,正在浏览残缺不全的文档中的。它似乎是爬行刚刚好,但我有麻烦让它输出到一个CSV文件(或任何真正的) 所以,我的问题是我能用这个吗: scrapy crawl dmoz -o items.csv 还是我必须创建一个新的 已更新,现在使用代码!: import scrapy from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors import LinkExtra

我遇到了一个问题,正在浏览残缺不全的文档中的。它似乎是爬行刚刚好,但我有麻烦让它输出到一个CSV文件(或任何真正的)

所以,我的问题是我能用这个吗:

scrapy crawl dmoz -o items.csv
还是我必须创建一个新的

已更新,现在使用代码!:

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from targets.item import TargetsItem

class MySpider(CrawlSpider):
    name = 'abc'
    allowed_domains = ['ididntuseexample.com']
    start_urls = ['http://www.ididntuseexample.com']

    rules = (
    # Extract links matching 'category.php' (but not matching 'subsection.php')
    # and follow links from them (since no callback means follow=True by default).
    Rule(LinkExtractor(allow=('ididntuseexample.com', ))),

)

    def parse_item(self, response):
       self.log('Hi, this is an item page! %s' % response.url)
       item = TargetsItem()
       item['title'] = response.xpath('//h2/a/text()').extract() #this pulled down data in scrapy shell
       item['link'] = response.xpath('//h2/a/@href').extract()   #this pulled down data in scrapy shell
       return item

规则是
CrawlSpider
用于以下链接的机制。这些链接是用
链接抽取器定义的。此元素基本上指示要从爬网页面中提取哪些链接(如
start\u url
列表中定义的链接)。然后,您可以传递一个回调,该回调将在每个提取的链接上调用,或者更准确地说,在这些链接之后下载的页面上调用

您的规则必须调用
parse\u项
。因此,替换:

Rule(LinkExtractor(allow=('ididntuseexample.com', ))),
与:

此规则定义要在其
href
ididdntuseexample.com
的每个链接上调用
parse_item
。我怀疑作为链接提取器,您想要的不是域,而是您想要跟随/刮取的链接

这里有一个爬行的基本示例,用于检索主页中所有新闻的标题和第一条评论的第一行

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor

class HackerNewsItem(scrapy.Item):
    title = scrapy.Field()
    comment = scrapy.Field()

class HackerNewsSpider(CrawlSpider):
    name = 'hackernews'
    allowed_domains = ['news.ycombinator.com']
    start_urls = [
        'https://news.ycombinator.com/'
    ]
    rules = (
        # Follow any item link and call parse_item.
        Rule(LinkExtractor(allow=('item.*', )), callback='parse_item'),
    )

    def parse_item(self, response):
        item = HackerNewsItem()
        # Get the title
        item['title'] = response.xpath('//*[contains(@class, "title")]/a/text()').extract()
        # Get the first words of the first comment
        item['comment'] = response.xpath('(//*[contains(@class, "comment")])[1]/font/text()').extract()
        return item

CSV以及JSON和XML是一种现成的导出格式。所以,是的,
scrapy crawl dmoz-o items.csv应该可以工作。你能详细说明一下你遇到的麻烦吗?就这样,一切似乎都很好。输出日志中没有错误,它创建了文件,但当我打开csv时,文件中什么都没有。当我使用基本爬行器完成教程时,一切都运行得很好,这就是我问的原因。您使用的代码是否与爬行器示例中的代码完全相同?我的意思是,你是否更改了
start\u url=['http://www.example.com“]
line?你能用蜘蛛代码编辑你的问题吗?我问这一切是因为我怀疑你的蜘蛛实际上没有得到任何数据,因此,生成了一个空的CSV。添加到代码中。我不得不改变域名,但我肯定没有使用example.com(尽管我很感激你的提问)。我还通过shell运行了xpath,它将数据拉回来,因此我有理由肯定这也不是问题所在。不管怎样,谢谢你看,德雷耶斯卡特!rules对象不是绝对必要的,或者它是用于scraper
crawlspider
?此外,在此上下文中是
HackerNewsItem()
应用
字段对象的类?
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor

class HackerNewsItem(scrapy.Item):
    title = scrapy.Field()
    comment = scrapy.Field()

class HackerNewsSpider(CrawlSpider):
    name = 'hackernews'
    allowed_domains = ['news.ycombinator.com']
    start_urls = [
        'https://news.ycombinator.com/'
    ]
    rules = (
        # Follow any item link and call parse_item.
        Rule(LinkExtractor(allow=('item.*', )), callback='parse_item'),
    )

    def parse_item(self, response):
        item = HackerNewsItem()
        # Get the title
        item['title'] = response.xpath('//*[contains(@class, "title")]/a/text()').extract()
        # Get the first words of the first comment
        item['comment'] = response.xpath('(//*[contains(@class, "comment")])[1]/font/text()').extract()
        return item