Scrapy爬取所有网站地图链接。

4

我想爬取一个固定网站中sitemap.xml中存在的所有链接。我已经找到了Scrapy的SitemapSpider。到目前为止,我已经提取了sitemap中的所有url。现在我想遍历每个链接。任何帮助都将非常有用。到目前为止的代码是:

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

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

1
如果您可以发布该域的有效URL,则更容易检查代码。 - Talvalin
2个回答

3
您需要添加sitemap_rules来处理爬取的URL中的数据,并且可以创建任意数量的规则。 例如,假设您有一个名为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

如果没有指定规则,则默认调用parse方法;我相信原帖在这方面是正确的。 - Herman Schaaf

3

您可以创建新的请求对象来爬取SitemapSpider生成的URL,并使用新回调函数解析响应:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接