我想抓取所有标题标签以及父项标签中的其他标签。但是无法刮.。尝试了易碎的外壳,看起来工作正常。下面是我的整个代码

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy_rss.items import rssItem
from scrapy.utils.response import get_base_url
import time

class MySpider(CrawlSpider):
    name = 'rssaggr'
    allowed_domains = ['indianexpress.com']
    start_urls = ['http://indianexpress.com/section/sports/feed/']
    rules = (
        Rule(SgmlLinkExtractor(allow=('', ), deny=('defghi\.txt')), callback='parse_item',follow=True),
    )
    def parse_item(self, response):
     sel = Selector(response)
     items = sel.xpath('//item')
     for elements in items:
      item = rssItem()
      item['title'] = elements.xpath('./title/text()').extract()
      return item


以下是我的items.py

from scrapy.item import Item, Field

class ScrapyRssItem(Item):
    # define the fields for your item here like:
    # name = Field()
    pass

class rssItem(Item):
    title = Field()

最佳答案

您的函数应命名为parse而不是parse_item。 Scrapy希望您覆盖Spider的parse方法。因此,您不应使用其他名称(see the documentation)。

另外,您的代码将仅返回第一个已解析的项目。您可以将所有项目添加到列表中,然后将其返回。我这样修改了您的代码,因此您可以从Feed中获取所有项目(我对其进行了测试,并且可以正常运行)。

def parse(self, response):
    sel = Selector(response)
    items = sel.xpath('//item')
    parsed_items = []
    for elements in items:
        item = rssItem()
        item['title'] = elements.xpath('./title/text()').extract()
        parsed_items.append(item)
    return parsed_items

关于python - 在爬取RSS提要时无法爬取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24213736/

10-13 05:37