Scrapy抓取所有站点地图链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy抓取所有站点地图链接相关的知识,希望对你有一定的参考价值。

我想抓取固定网站的sitemap.xml中存在的所有链接。我遇到过Scrapy的SitemapSpider。到目前为止,我已经提取了站点地图中的所有网址。现在我想抓取站点地图的每个链接。任何帮助都非常有用。到目前为止的代码是:

class MySpider(SitemapSpider):
    name = "xyz"
    allowed_domains = ["xyz.nl"]
    sitemap_urls = ["http://www.xyz.nl/sitemap.xml"] 

    def parse(self, response):
        print response.url
答案

您需要添加sitemap_rules来处理已爬网网址中的数据,并且您可以根据需要创建任意数量的数据。例如,假设您有一个名为http://www.xyz.nl//x/的页面,您想要创建一个规则:

class MySpider(SitemapSpider):
    name = 'xyz'
    sitemap_urls = 'http://www.xyz.nl/sitemap.xml'
    # list with tuples - this example contains one page 
    sitemap_rules = [('/x/', parse_x)]

    def parse_x(self, response):
        sel = Selector(response)
        paragraph = sel.xpath('//p').extract()

        return paragraph
另一答案

基本上,您可以创建新的请求对象来抓取SitemapSpider创建的网址,并使用新的回调解析响应:

class MySpider(SitemapSpider):
    name = "xyz"
    allowed_domains = ["xyz.nl"]
    sitemap_urls = ["http://www.xyz.nl/sitemap.xml"] 

    def parse(self, response):
        print response.url
        return Request(response.url, callback=self.parse_sitemap_url)

    def parse_sitemap_url(self, response):
        # do stuff with your sitemap links

以上是关于Scrapy抓取所有站点地图链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Scrapy FormRequest 在分页的 .asp 站点上模拟下一页链接请求

如何用scrapy抓取每个链接的所有内容?

Python之Scrapy安装

利用ASP.NET里自带的站点地图工具制作网站站点地图

无法使用scrapy抓取某些网站

一个站点的诞生02--用Scrapy抓取数据