私はScrapyのXMLfeedspiderを使用してページxmlから情報を抽出しています。私はこのページのタグ "loc"の中にあるリンクだけを抽出してロードしますが、リダイレクトするページをブロックして、このページから情報を収集する最後の解析ノードに送信しようとしています。問題は、これらのページを "def star_urls"にロードするか、parse_nodeを使用して必要な情報を抽出するために別の解析にリダイレクトする必要があるかどうかわからないが、すべてのlocタグではなく、xmlページからのリンクだけを抽出する方法がわかりません。XMLページからURLを抽出し、それらを読み込み、Scrapy - XMLfeedspiderを使用してそれらの中の情報を抽出する方法?
私の考えを再開:
をアイデアは、負荷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
そして、最終的にはそれぞれのロードこのページのタイトルとURLを抽出します。
アイデア?
は私のコードの下に検索:
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()
完璧、あなたの答えに非常に感謝します。他のページに自動的にリダイレクトするリンクはほとんどなかったので、リダイレクトを停止したいと思っていました。 – Pablo