LinkExtractor 深度爬取url中含有中文关键字

scrapy 默认的是utf-8的格式进行编码,在利用链接提取器LinkExtractor进行深度爬取的时候, 返回的Response中的url链接中可能会含有中文关键字,如果不进行处理的情况下scrapy会自动的将中关键字以utf-8的格式进行编码后再去请求这个url,但是网站的解析格式可能不是utf-8, 比如百度就是gbk格式,这时候可以利用LinkExtractor中的process_links 指定特定的函数对返回的url进行处理

复制代码
rules = (Rule(LinkExtractor(restrict_xpaths='//div[@class="showpagelist"]/a'), callback="parse_item", follow=True,process_links="encode_url"),)
def encode_url(self, links):
    """
        因为网页是以gbk的形式编码,但是在scrapy中是以utf-8的形式编码,需要修改url中的中文字符的编码格式
        :param links:经过解析后的返回的url
        :return:
        """

    for each in links:
        serach_keys = re.search(r"search_key=(.*?)&.*", each.url )
        if serach_keys:
            serach_key = serach_keys.group(1)
            if self.check_contain_chinese(serach_key):
                encoded_search_key = quote(serach_key.encode("gbk"))
                each.url = re.sub(r'%s'%serach_key, encoded_search_key, each.url)
    return links

def check_contain_chinese(self, check_str):
    # 判断字符串是不是中文
    for ch in check_str:
        if u'\u4e00' <= ch <= u'\u9fff':
            return True

    return False
复制代码

 

posted @   苜蓿椒盐  阅读(543)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示