python - 在发送请求之前重写 scrapy URL

标签 python scrapy

我正在使用 scrapy 来抓取多语言网站。对于每个对象,存在三种不同语言的版本。我使用搜索作为起点。不幸的是,搜索包含各种语言的 URL,这会导致解析时出现问题。

因此,我想在发送 URL 之前对其进行预处理。如果它们包含特定字符串,我想替换 URL 的那部分。

我的蜘蛛扩展了 CrawlSpider。我查看了文档并找到了 make_request_from _url(url) 方法,这导致了这次尝试:

def make_requests_from_url(self, url):                                                          
    """                                                                                         
    Override the original function go make sure only german URLs are                            
    being used. If french or italian URLs are detected, they're                                 
    rewritten.                                                                                  

    """                                                                                         
    if '/f/suche' in url:                                                                       
        self.log('French URL was rewritten: %s' % url)                                          
        url = url.replace('/f/suche/pages/', '/d/suche/seiten/')                                
    elif '/i/suche' in url:                                                                     
        self.log('Italian URL was rewritten: %s' % url)                                            
        url = url.replace('/i/suche/pagine/', '/d/suche/seiten/')                                  
    return super(MyMultilingualSpider, self).make_requests_from_url(url)                                                  

但由于某些原因,这不起作用。在请求之前重写 URL 的最佳方法是什么?也许通过规则回调?

最佳答案

可能没有什么值(value)的例子,因为我花了大约 30 分钟才弄明白:

rules = [
    Rule(SgmlLinkExtractor(allow = (all_subdomains,)), callback='parse_item', process_links='process_links')
]

def process_links(self,links):
    for link in links:
        link.url = "something_to_prepend%ssomething_to_append" % link.url
    return links

关于python - 在发送请求之前重写 scrapy URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106294/

相关文章:

scrapy - 为 scrapy shell 请求设置 header

python - 如何检查字符串是否包含两个括号之间的数字并返回位置?

python - 如何修复在 Flask-uwsgi-Nginx 设置中被 Post 请求延迟的 websocket 消息?

python - 阻止 Flask 初始化阻塞

python - 如何解决带有额外约束的背包问题? (或替代算法)

python - Scrapy - 达到最大重定向时生成 URL [301]

python - 在python中并行执行任务

python - CsvItemExporter 子类中的 Scrapy 1.0+ 正确设置访问?

python - 使用 Scrapy 登录和抓取网页

python scrapy无法启动项目