文本抓取、撇号、â\x80\x99、正则表达式、python

Text scraping, apostrophe, â\x80\x99, regular expression, python

<div id="product_description" class="sub-header">
        <h2>Product Description</h2>
    </div>
    <p>Dans une France assez proche de la nôtre, un homme s’engage dans la carrière universitaire. Peu motivé par l’enseignement, il s’attend à une vie ennuyeuse mais calme, protégée des grands drames historiques. Cependant les forces en jeu dans le pays ont fissuré le système politique jusqu’à provoquer son effondrement. Cette implosion sans soubresauts, sans vraie révolution, s Dans une France assez proche de la nôtre, un homme s’engage dans la carrière universitaire. Peu motivé par l’enseignement, il s’attend à une vie ennuyeuse mais calme, protégée des grands drames historiques. Cependant les forces en jeu dans le pays ont fissuré le système politique jusqu’à provoquer son effondrement. Cette implosion sans soubresauts, sans vraie révolution, se développe comme un mauvais rêve.Le talent de l’auteur, sa force visionnaire nous entraînent sur un terrain ambigu et glissant ; son regard sur notre civilisation vieillissante fait coexister dans ce roman les intuitions poétiques, les effets comiques, une mélancolie fataliste.Ce livre est une saisissante fable politique et morale. ...more</p>
    



<div class="sub-header">

我想抓取文本块。你能告诉我那里发生了什么吗?我的尝试就在这里。

url = 'https://books.toscrape.com/catalogue/soumission_998/index.html'
response = requests.get(url)
text = response.text

pattern = re.compile(r'<h2>Product Description</h2>\s*</div>\s*<p>(.+?)</p>', re.M | re.S)
brief_dscrp = pattern.findall(text)
brief_dscrp

结果是:

['Dans une France assez proche de la nôtre, un homme sâ\x80\x99engage dans la carrière universitaire. Peu motivé par lâ\x80\x99enseignement, il sâ\x80\x99attend Ã\xa0 une vie ennuyeuse mais calme, protégée des grands drames historiques. Cependant les forces en jeu dans le pays ont fissuré le système politique jusquâ\x80\x99Ã\xa0 provoquer son effondrement. Cette implosion sans soubresauts, sans vraie révolution, s Dans une France assez proche de la nôtre, un homme sâ\x80\x99engage dans la carrière universitaire. Peu motivé par lâ\x80\x99enseignement, il sâ\x80\x99attend Ã\xa0 une vie ennuyeuse mais calme, protégée des grands drames historiques. Cependant les forces en jeu dans le pays ont fissuré le système politique jusquâ\x80\x99Ã\xa0 provoquer son effondrement. Cette implosion sans soubresauts, sans vraie révolution, se développe comme un mauvais rêve.Le talent de lâ\x80\x99auteur, sa force visionnaire nous entraînent sur un terrain ambigu et glissant ; son regard sur notre civilisation vieillissante fait coexister dans ce roman les intuitions poétiques, les effets comiques, une mélancolie fataliste.Ce livre est une saisissante fable politique et morale. ...more']

您应该使用诸如 BeautifulSoup 之类的抓取库,而不是正则表达式。它将以更优雅的方式处理这种 Unicode 废话。

无论哪种方式,您在这里看到的是当您执行 response.text 时,requests 将尝试根据响应 headers 猜测页面的编码。出于某种原因,requests 无缘无故地决定响应为 ISO-8859-1。 (如果没有明确指定编码,它将使用 chardet 库。)

您可以强制请求使用 chardet:

response.encoding = None
text = response.text

或强制已知的正确编码,

response.encoding = "utf-8"
text = response.text

或者自己对二进制内容进行解码:

text = response.content.decode("utf-8")

瞧瞧:

['Dans une France assez proche de la nôtre, un homme s’engage dans la carrière universitaire. Peu motivé par l’enseignement, ...