BeautifulSoup дает мне unicode+html символы, а не прямо unicode. Действительно ли это - ошибка или недоразумение?

Нет метода списка, но нетрудно реализовать такую ​​функцию: отсканируйте нужные индексы, а затем нарезайте их.

def strip_seq(predicate, xs):
    def scan(xs):
        return next((i for i, x in enumerate(xs) if not predicate(x)), 0)
    return xs[scan(xs) : -scan(reversed(xs)) or None]

xs = ["0", "0", "a", "1", "0", "0", "1", "0", "b", "0", "0", "0"]
print(strip_seq(lambda x: x=='0', xs))  # ['a', '1', '0', '0', '1', '0', 'b']

Это должно работать с любыми типами последовательностей, включая строки и кортежи.

5
задан 10 March 2009 в 13:09
поделиться

2 ответа

Это - то, серьезно испортил страницу, мудрую кодированием :-)

Нет ничего действительно неправильно с Вашим подходом вообще. Я был бы, вероятно, склонен делать преобразование прежде, чем передать его BeautifulSoup, просто потому что я - persnickity:

import urllib
html = urllib.urlopen('http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271').read()
h = html.decode('iso-8859-1')
soup = BeautifulSoup(h)

В этом случае метатег страницы лжет о кодировании. Страница находится на самом деле в utf-8... Информация о странице Firefox показывает реальное кодирование, и можно на самом деле видеть этот набор символов в заголовках ответа, возвращенных сервером:

curl -i http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271
HTTP/1.1 200 OK
Connection: close
Date: Tue, 10 Mar 2009 13:14:29 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Set-Cookie: COMPANYID=271;path=/
Content-Language: en-US
Content-Type: text/html; charset=UTF-8

Если Вы сделаете декодирование с помощью 'utf-8', то оно будет работать на Вас (или, по крайней мере, сделал для меня):

import urllib
html = urllib.urlopen('http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271').read()
h = html.decode('utf-8')
soup = BeautifulSoup(h)
ps = soup.body("p")
p = ps[52]
print p
8
ответ дан 13 December 2019 в 05:43
поделиться

Это на самом деле UTF-8 misencoded как CP1252:

>>> print u'Oxfam International\xe2€™s report entitled \xe2€œOffside!'.encode('cp1252').decode('utf8')
Oxfam International’s report entitled “Offside!
4
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: