我正在使用Scrapy的xml提要蜘蛛网站Map来抓取和提取url,而且只有url。
xml站点Map如下所示:
<url>
<loc>
https://www.example.com/american-muscle-5-pc-kit-box.html
</loc>
<lastmod>2020-10-14T15:40:02+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<image:image>
<image:loc>
https://www.example.com/pub/media/catalog/product/cache/de5bc950da2c28fc62848f9a6b789a5c/1/2/1202_45.jpg
</image:loc>
<image:title>
5 PC. GAUGE KIT, 3-3/8" & 2-1/16", ELECTRIC SPEEDOMETER, AMERICAN MUSCLE
</image:title>
</image:image>
<PageMap>
<DataObject type="thumbnail">
<Attribute name="name" value="5 PC. GAUGE KIT, 3-3/8" & 2-1/16", ELECTRIC SPEEDOMETER, AMERICAN MUSCLE"/>
<Attribute name="src" value="https://www.example.com/pub/media/catalog/product/cache/de5bc950da2c28fc62848f9a6b789a5c/1/2/1202_45.jpg"/>
</DataObject>
</PageMap>
</url>
我只想获取<loc></loc>
的内容
因此,我把我的Scrapy Spider设计成这样(为了简洁起见,省略了一些部分):
start_urls = ['https://www.example.com/sitemap.xml']
namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
itertag = 'url'
def parse_node(self, response, selector):
item = {}
item['url'] = selector.select('url').get()
selector.remove_namespaces()
yield {
'url': selector.xpath('//loc/text()').getall()
}
这最终给了我所有产品图片的url和url。我怎么才能设置这个蜘蛛只得到实际的产品页面url?
1条答案
按热度按时间332nm8kg1#
为了更改站点Map蜘蛛逻辑的这一部分,需要覆盖It's
_parse_sitemap
方法(源代码)和替换部分
被这样的东西
在这种情况下,spider应该从已解析的站点Map条目中返回项目,而不是对每个链接都发出请求