url链接出现 %EF%BB%BF
在一次爬虫代码编辑的过程中遇到‘url链接出现 %EF%BB%BF’的问题,问题十分隐蔽,找了好久才定位到问题。
背景
在这次实验中,我采用了txt文本来记录我后面需要爬取的连接中的关键词,然后在爬取过程中,使用base_url与关键词的拼接来获取最终的url。
之前在获取百度百科的数据时,这种方式完全没有问题,但是在获取互动百科的数据时,出现404,无法找到所需资源。
这就非常奇怪了,加入我是用同样的base_url,然后在后面手动输入相同的关键词,是可以正常进行搜索的。
拼接的url:https://www.baike.com/wiki/李娜
手动写关键词的url:https://www.baike.com/wiki/李娜
光凭肉眼看,绝对认为这是两个完全一样的字符串呀!!!
解决过程
1、考虑编码问题
最开始考虑的是编码问题,可是所有需要进行utf-8参数的地方都检查过了,而且也考虑将获取到的关键词keyword重新进行转码,还是无用
2、空格和换行符
在无意中发现keyword打印出来会自动进行换行,猜测是因为有换行符的问题,因此去掉字符串的前后空格和换行符,还是没有解决问题。
3、定位出%EF%BB%BF
最后实在没有办法,就去之前获取百度数据的代码中尝试答应出拼接后的url,并使用改url取浏览器的输入框中尝试,终于发现,关键词前面多了%EF%BB%BF码。
对其进行搜索,找到一下解答:
根据拼接的地址file_get_contents到新地址,在iframe地址显示正常,鼠标放上去的地址会出现网站的域名+%EF%BB%BF,造成无法请求到真实的地址。
https://baike.baidu.com/item/%EF%BB%BF%李娜
解决办法:
1、使用notpad++打开$result对应的文件,然后在格式里选择utf-8无BOM格式,保存。
2、这个文件的开头有bom标志(占用3个字节,用来表示它的代码页的,编辑器里看不到),你要么跳过,要么去掉。
4、去掉’\n’
在解决掉%EF%BB%BF后,获取资源还是失败。
我们将获取到的keyword中的’\n’替换为’’
url = base_url+name.replace('\n','')
只能感叹,互动百科和百度百科比起来还是太弱了,居然没有办法自动解决%EF%BB%BF和末尾换行符的问题,而且出现问题后直接重定向,导致无法看到输入的url的问题。