如何在带有文本站点地图的站点上使用Scrapy sitemap spider?

2024-06-17 16:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用普通的蜘蛛屑我想通过访问sitemap.txt来简化流程,但这也没用!在

我写了一个简单的例子(以帮助我理解算法)来遵循我的站点上指定的站点地图:https://legion-216909.appspot.com/sitemap.txt它的意思是导航站点地图上指定的url,将它们打印到屏幕上,并将结果输出到links.txt文件中。代码:

import scrapy
from scrapy.spiders import SitemapSpider

class MySpider(SitemapSpider):
    name = "spyder_PAGE"
    sitemap_urls = ['https://legion-216909.appspot.com/sitemap.txt']

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

我以Scrapy crawl spyder_PAGE > links.txt的身份运行上述spider,但返回了一个空文本文件。我看了好几次那些难看的文件,但有些东西不见了。我哪里出错了?在


Tags: 文件httpsimporttxtcomurl站点response
2条回答

SitemapSpider需要XML站点地图格式,导致爬行器退出并出现以下错误:

[scrapy.spiders.sitemap] WARNING: Ignoring invalid sitemap: <200 https://legion-216909.appspot.com/sitemap.txt>

由于您的sitemap.txt文件只是一个简单的列表或url,因此使用string方法拆分它们会更容易。在

例如:

from scrapy import Spider, Request

class MySpider(Spider):
    name = "spyder_PAGE"
    start_urls = ['https://legion-216909.appspot.com/sitemap.txt']

    def parse(self, response):
        links = response.text.split('\n')
        for link in links:
            # yield a request to get this link
            print(link)

# https://legion-216909.appspot.com/index.html
# https://legion-216909.appspot.com/content.htm
# https://legion-216909.appspot.com/Dataset/module_4_literature/Unit_1/.DS_Store

您只需使用以下命令重写来自SitemapSpider_parse_sitemap(self, response)

from scrapy import Request
from scrapy.spiders import SitemapSpider

class MySpider(SitemapSpider):
   sitemap_urls = [...]
   sitemap_rules = [...]
   def _parse_sitemap(self, response):
        # yield a request for each url in the txt file that matches your filters
        urls = response.text.splitlines()
        it = self.sitemap_filter(urls)
        for loc in it:
            for r, c in self._cbs:
                if r.search(loc):
                    yield Request(loc, callback=c)
                    break

相关问题 更多 >