首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Scrapy [Python]爬行相对URL

用Scrapy [Python]爬行相对URL
EN

Stack Overflow用户
提问于 2021-01-19 12:32:53
回答 1查看 211关注 0票数 1

我是SEO专家,不太喜欢编码。但是想要尝试用Scrapy模块在Python中创建一个坏链接检查器,它将爬行我的网站,并向我展示404代码的所有内部链接。

到目前为止,我已经成功地编写了以下代码:

代码语言:javascript
运行
复制
    import scrapy
    from scrapy.spiders import CrawlSpider, Rule
    from scrapy.linkextractors import LinkExtractor
    from crawler.items import Broken


    class Spider(CrawlSpider):
        name = 'example'
        handle_httpstatus_list = [404]
        allowed_domains = ['www.example.com']

        start_urls = ['https://www.example.com']

        rules = [Rule(LinkExtractor(), callback='parse_info', follow=True)]
        def parse_info(self, response):
            report = [404]
            if response.status in report:
                Broken_URLs = Broken()
                #Broken_URLs['title']= response.xpath('/html/head/title').get()
                Broken_URLs['referer'] = response.request.headers.get('Referer', None)
                Broken_URLs['status_code']= response.status
                Broken_URLs['url']= response.url
                Broken_URLs['anchor']= response.meta.get('link_text')


                return Broken_URLs

它爬行很好,只要我们有绝对的网址在网站的结构。

但在某些情况下,当爬虫遇到相对url的链接时,最终会得到这样的链接:

通常应:

https://www.example.com/en/..

但它给了我:

https://www.example.com/en/en/..。-双语言文件夹,以404代码结尾。

我正试图找到一种方法来覆盖这种语言复制,并在结尾处使用正确的结构。

有人知道怎么修吗?会很感激的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-19 21:34:37

使用urllib.parse.urljoin处理相对urls。

您可以通过将自定义函数添加到process_request中的Rule定义中来修复它:

代码语言:javascript
运行
复制
def fix_urls():
    def process_request(request, response):
        return request.replace(url=request.url.replace("/en/en/", "/en/"))
    return process_request

class Spider(CrawlSpider):
    name = 'example'
...
    rules = [Rule(LinkExtractor(), process_request=fix_urls(), callback='parse_info', follow=True)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65791593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档