url拼接遇到的无效问题

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的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值