我想在父项标签中抓取所有标题标签以及其他标签。但无法刮伤。尝试scrapy外壳,它似乎工作正常。以下是我的整个代码
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()
答案 0 :(得分:2)
您的功能应命名为parse
而不是parse_item
。 Scrapy希望您覆盖蜘蛛的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