【发布时间】:2017-07-20 16:48:34
【问题描述】:
我正在使用来自 Scrapy 的 XMLfeedspider 从页面 xml 中提取信息。我试图仅提取标签“loc”内此页面上的链接并加载它们,但阻止页面重定向,然后将其发送到将从该页面收集信息的最后一个解析节点。问题是我不确定是否可以在“def star_urls”上加载这些页面,或者我是否需要使用 parse_node 并重定向到另一个解析来提取我需要的信息,但即使我尝试了我'我不知道如何只从 xml 页面中提取链接,而不是所有 loc 标记。
继续我的想法:
这个想法应该是加载this xml page并从中提取<loc>标签内的链接,如下所示:
https://www.gotdatjuice.com/track-2913133-sk-invitational-ft-sadat-x-lylit-all-one-cdq.html https://www.gotdatjuice.com/track-2913131-sk-invitational-ft-m-o-p-we-dont-stop-cdq.html
然后最后加载每个页面并提取标题和网址。
有什么想法吗?
在我的代码下面找到:
from scrapy.loader import ItemLoader
from scrapy.spiders import XMLFeedSpider
from scrapy.http import Request
from testando.items import CatalogueItem
class TestSpider(XMLFeedSpider):
name = "test"
allowed_domains = ["gotdajuice.ie"]
start_urls = [
'https://www.gotdatjuice.com/sitemap.xml'
]
namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
itertag = 'n:loc'
iterator = 'xml'
name_path = ".//div[@class='song-name']/h1/text()"
def start_request(self):
urls = node.xpath(".//loc/text()").extract()
for url in urls:
yield scrapy.Request(
meta={'dont_redirect': True},
dont_filter=True,
url=url, callback=self.parse_node)
def parse_node(self, response, node):
l = ItemLoader(item=CatalogueItem(), response=response)
l.add_xpath('name', self.name_path)
l.add_value('url', response.url)
return l.load_item()
【问题讨论】: