Scrapy:存储所有外部链接并爬网所有内部链接

2024-04-29 07:55:17 发布

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

我一直在研究一个不起眼的web scraper,它从一个开始url爬过所有内部链接,只收集带有scrapy的外部链接。但是,我的主要问题是对外部链接和内部链接进行分类。例如,当我试图用link.startswith("http") or link.startswith("ftp") or link.startswith("www")过滤掉外部链接时,如果网站用绝对路径(www.my-domain.com/about而不是/about)链接自己的网站,那么即使不是,它也会将其归类为外部链接。以下是我的代码:

import scrapy
from lab_relationship.items import Links

class WebSpider(scrapy.Spider):
    name = "web"
    allowed_domains = ["my-domain.com"]
    start_urls = (
        'www.my-domain.com',
    )

    def parse(self, response):
        """ finds all external links"""
        items = []
        for link in set(response.xpath('//a/@href').extract()):
            item = Links()
            if len(link) > 1:
                if link.startswith("/") or link.startswith("."):
                    # internal link
                    url = response.urljoin(link)
                    item['internal'] = url
                    #yield scrapy.Request(url, self.parse)
                elif link.startswith("http") or link.startswith("ftp") or link.startswith("www"):
                    # external link
                    item['external'] = link
                else:
                    # misc. links: mailto, id (#)
                    item['misc'] = link
                items.append(item)
        return items

有什么建议吗?


Tags: orcomurl链接responsemydomainwww