|
发表于 2023-7-12 23:47:21
|
显示全部楼层
你的代码中的问题主要是类型不匹配。 re.findall 需要的是字符串对象,但你提供的是字节串(bytes-like object)。同时,你的响应可能不是 UTF-8 编码的,所以你得到了乱码。
首先, requests.get().text 是尝试使用 requests 自身的编码推测来解码响应的,如果这种推测失败,那么 .text 属性可能会返回乱码。
为了解决这个问题,你需要明确你的网页的编码方式,然后用这种方式来解码响应。
你可以试试以下的代码,它首先使用 requests.get().content 来获取未解码(raw)的响应,然后根据你指定的编码方式(比如 'utf-8')来解码这个响应。
- response=requests.get(url=url,headers=headers).content
- response=response.decode('utf-8')
- p_name = '<td align="center"><a class="btn btn-success btn-sm"'
- name = re.findall(p_name, response)
- print(name)
复制代码
如果你仍然遇到乱码的问题,那可能是因为网页不是 'utf-8' 编码的,你需要查找并使用正确的编码方式。在许多情况下,网页的编码方式会在 HTML 的 <head> 中声明,比如 <meta charset="gb2312"> 。这时你需要将 .decode('utf-8') 中的 'utf-8' 替换成正确的编码,如 'gb2312'。
当然,也可以尝试使用 chardet 库来自动检测网页的编码。
- import chardet
- response=requests.get(url=url,headers=headers).content
- encoding = chardet.detect(response)['encoding']
- response=response.decode(encoding)
- p_name = '<td align="center"><a class="btn btn-success btn-sm"'
- name = re.findall(p_name, response)
- print(name)
复制代码
chardet.detect(response) 会返回一个字典,其中包含可能的编码方式及其可能性, ['encoding'] 会返回最可能的编码方式。 |
|