BeautifulSoup编码的字符无法解码

时间:2019-12-05 11:20:37

标签: python encoding beautifulsoup

我正在按照视频中的某些说明进行操作,但似乎遇到了麻烦。 在以下网站上运行脚本时,我试图访问托管每个游戏赔率的容器,以将thme导入单独的csv文件中。

import bs4
from urllib.request import urlopen as uReq

from bs4 import BeautifulSoup as soup

#my_url = 'https://www.google.com/search?q=premier+league&rlz=1C1GCEU_en-GBIN877FR877&oq=pre&aqs=chrome.0.69i59j69i57j35i39j69i65l2j69i60l3.628j0j7&sourceid=chrome&ie=UTF-8#sie=lg;/g/11fj6snmjm;2;/m/02_tc;mt;fp;1;;'
my_url = 'https://sports.coral.co.uk/sport/football/matches/tomorrow'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

container = page_soup.find_all("div",{"class":"oddsicard desktop-sport-card"})
print(len(container))

但是,由于所有字符都不可读,我遇到了无法选择容器的问题。我曾在其他页面上尝试过此方法,但似乎可以正常工作,因此我认为解码或网页本身有问题。

打印时,这是输出:

vn#���b��
��
�u��W��!�JE�O���;�����
��7�_�,p ��AGh��}���oP�.ܱy;o/��-�{A��rrsh|?[Z����
I�N��]����l�b՜��f6�='��.���R�NWex����&���Q�����m0��~�c�N���zA#/

如果有人可以帮助您,将不胜感激。

1 个答案:

答案 0 :(得分:1)

此url发送使用brotli压缩的数据,当我尝试将标头'Accept-Encoding'与其他压缩一起使用时,它不会以未压缩的方式发送数据。

您必须安装模块brotlipy并使用它解压缩内容

import brotli

page_html = brotli.decompress(page_html)

from urllib.request import urlopen as uReq

my_url = 'https://sports.coral.co.uk/sport/football/matches/tomorrow'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

print(uClient.headers['Content-Encoding']) # `br` means `brotli`

import brotli

page_html = brotli.decompress(page_html)

print(page_html)