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