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