【问题标题】:how to get utf8 encoded html content如何获取 utf8 编码的 html 内容
【发布时间】:2015-03-05 09:02:48
【问题描述】:

我有下一个代码

# __author__ = 'Vahagn'
 # -*- coding: utf-8 -*-
import BeautifulSoup
import requests
     req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html")
     s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text
     print(s2+'\n')

我将 s2 发送到控制台或写入文件的位置

Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ.

但是需要

Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных.

请帮助,我该如何修复它,因为在此文本(s2)之后写入 mysql。谢谢你。

【问题讨论】:

  • 你真的应该使用 beautifulSoup4
  • 它对我来说很好,问题在于您的系统编码。你用的是python 2还是3?
  • 你在哪里运行代码? req.encoding 输出什么?
  • req.encoding -> windows - 1251

标签: python mysql ascii encode


【解决方案1】:

你可能需要解码:

s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).tex‌​t 


In [72]: s2 = BeautifulSoup(req.content).find('p',{'class':'text'}).text
In [73]: s2
Out[73]: 'Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ.'

In [74]: s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).text    
In [75]: s2
Out[75]: 'Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных.'

【讨论】:

    【解决方案2】:

    查看 HTML 和响应标头,Web 服务器不会向您发送数据的编码。这意味着 Python 必须做出猜测。我认为它将使用您的默认编码(无论您的操作系统使用什么)。

    尝试使用不同的编码将req.content 转换为unicode,直到找到产生正确输出的编码:

    content = unicode(req.content, encoding)
    

    尝试将utf-8iso-latin-1 作为编码或在俄罗斯使用的一些常见编码。

    【讨论】:

    • s2 = unicode(s2, encoding='utf-8') TypeError: 不支持解码 Unicode
    • 似乎s2 已经是一种Unicode 字符串,但它可能是乱码。尝试s2 = s.encode('iso-8859-1').decode('utf-8') 或查看requests 模块,如果您可以覆盖/指定内容的编码。
    【解决方案3】:

    在打印之前尝试对其进行编码。像这样:

    import BeautifulSoup
    import requests
         req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html")
         s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text
         s2 = s2.encode('utf-8')
         print(s2+'\n')
    

    【讨论】:

    • s2 = unicode(s2, encoding='utf-8') TypeError: 不支持解码 Unicode
    • 我尝试这种方式 - UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2011-07-25
    • 2023-03-06
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多