代码之家  ›  专栏  ›  技术社区  ›  TJ1

使用Scrapy来抓取所有链接到网站的页面,这些页面的深度可以是我们想要的

  •  0
  • TJ1  · 技术社区  · 7 年前

    我很感兴趣,知道是否有可能在一个网站上的所有网页和链接与任何深度,即使在以下几个链接的顶部网址变化?举个例子:

    顶部URL:网址:www.topURL.com
    有3个链接:网址:www.topURL.com/link1, 网址:www.topURL.com/link2以及网址:www.topURL.com/link3


    上面有2个链接:网址:www.topURL.com/link4以及网址:www.topURL.com/link5

    但如果我们点击网址:www.topURL.com/link4它会将我们带到一个包含以下2个链接的页面:www.anotherURL.com/link1以及www.thirdul.com/link1

    scrapy或任何python爬虫/蜘蛛可以从网址:www.topURL.com然后跟踪链接并最终www.thirdul.com/link1?

    它的深度有限制吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Granitosaurus    7 年前

    看看斯拉皮 CrawlSpider spider class

    CrawlSpider是用于抓取常规网站的最常用的spider,因为它通过定义一组规则为跟踪链接提供了一种方便的机制。

    为了实现你的目标,你只需要制定一些基本的规则:

    class MySpider(CrawlSpider):
        name = 'example.com'
        allowed_domains = ['example.com']
        start_urls = ['http://www.example.com']
    
        rules = (
            # Extract and follow all links!
            Rule(LinkExtractor(callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            self.log('crawling'.format(response.url))
    

    上面的爬虫程序将爬网与网站上允许的\u域匹配的每个url,并回调到 parse_item .
    LinkeExtractor 忽略媒体页(如pdf、mp4等)


    https://doc.scrapy.org/en/0.9/topics/settings.html#depth-limit

    # settings.py
    DEPTH_LIMIT = 0
    

    默认情况下,scrapy也会以深度优先进行爬网,但如果您希望更快地覆盖范围,则以宽度优先可能会改进这一点: https://doc.scrapy.org/en/0.9/topics/settings.html#深度-限制

    # settings.py
    SCHEDULER_ORDER = 'BFO'