当前位置:   article > 正文

关于爬虫时网页中含unicode编码导致正则无法正确匹配的问题_u002f是什么编码

u002f是什么编码

最近在爬取今日头条时 出现了正则无法正确匹配url问题 不使用’unicode-escape’方法下 现已解决 希望能帮助各位小伙伴
欲匹配的url如图

在这里插入图片描述

开始我使用的正则格式为


import re

headers = {

    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '

                  'Chrome/80.0.3987.149 Safari/537.36',

    'cookie': 'tt_webid=6806572343562094094; s_v_web_id=verify_k81ca1w0_vh0EbTyr_HS3Y_4PFK_Bwq2_DOrKyvhp5uMN; '

              'WEATHER_CITY=%E5%8C%97%E4%BA%AC; tt_webid=6806572343562094094; '

              'ttcid=43d91974d34a42df9358bcc4fb4a0c2834; csrftoken=444cb50514011fb72cca45e815aaa808; '

              'UM_distinctid=170fc2b546d409-074b4e2fd4738a-f313f6d-144000-170fc2b546ebd2; '

              'CNZZDATA1259612802=591899891-1584774793-https%253A%252F%252Fwww.toutiao.com%252F%7C1584774793; '

              '_ga=GA1.2.958742555.1584778663; SLARDAR_WEB_ID=38abe9ce-6f79-4e00-bb3f-e707bb7634f4; '

              'RT="z=1&dm=toutiao.com&si=4nvgi31t4wg&ss=k8lf382q&sl=1&tt=0&nu=f37766b0d023dcda3973b7fcbf2cba56&cl'

              '=d6t6&obo=1&ld=dd1u&r=4d707aab8209c38c1dfc5a11a3ddf8e5&ul=dd1x&hd=dd3r"; '

              '__tasessionId=npao9b1fx1586248375779; '

              'tt_scid=T3Kp0Z-NOCOt3q3JSm8Ss13n.KoME8zuZ3-6JZir9qD5qJICh.OGaUd0f72JWnSY4d75 '

}



def get_detail(url):#函数得源码

    response = requests.get(url, headers=headers)

    if response.status_code == 200:

        return response.text


def main():

    url = "https://www.toutiao.com/a6795524234970923531/"#传入url  今日头条界面

    html = get_detail(url)#得到源码

    print(html)

    images_pattern = re.compile("(http:\u002F\u002Fp\\w.pstatp.com\u002Flarge\u002Fpgc-image\u002F.*?)\", re.S)

    x = re.findall(images_pattern, html)#匹配

    print(x)#打印


#主函数

if __name__ == '__main__':

    main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

但匹配为空
但打印出来结果却能用正则正确匹配
查阅大量资料 问了一些前辈 给出的解决方法为
改为 response.content.decode("unicode-escape)

试验后 可行 但匹配的其他信息为乱码

今天突然想到另一种解决方法
将正则改为

images_pattern = re.compile("(http:\\\\u002F\\\\u002Fp\\w.pstatp.com\\\\u002Flarge\\\\u002Fpgc-image\\\\u002F.*?)\", re.S)
  • 1

转义正则表达式

ps:开始匹配不到的原因为
响应信息以utf-8解码后
里面的内容含有unicode编码
而我最开始的正则中含有的\u002F实际上也就是’/’ 而text文件中为‘\u002F’
二者根本不匹配 所以导致匹配失败!

大家可以仔细研究下‘unicode-escape’编码原理

a = "袁凤珍"
b = a.encode('unicode-escape')
print(b)
c = b.decode('utf-8')
print(c)
  • 1
  • 2
  • 3
  • 4
  • 5

结果为

>b'\\u8881\\u51e4\\u73cd'
>\u8881\u51e4\u73cd
  • 1
  • 2

说明 文字在经unicode-escape编码后经utf-8解码 出现unicode码点
这是网页中出现\u002F的原因
所以也可以用unicode-escape解码 但会导致其他部分乱码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/573274
推荐阅读
相关标签
  

闽ICP备14008679号