1

BeautifulSoupを使用してPython2.7でWebサイトをスクレイピングしています。これが私のコードです:

# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup
import urllib
import json

url = 'http://www.website.com'
file_pointer = urllib.urlopen(url)
html_object = BeautifulSoup(file_pointer)

type_select = html_object('select',{'id':'which'})

for option in type_select:
    value = option('option')
    for type_value in value:
        type =  type_value.contents[0]
        param_1 = type_value['value']
        print 'Type:', type

        url2 = 'http://www/website.com/' + param_1
        file_pointer2 = urllib.urlopen(url2)
        html_object2 = BeautifulSoup(file_pointer2)
        result = json.loads(str(html_object2))

        for json1 in result['DATA']:
            category = json1[0].title()
            param_2 = json1[0]
            print '   Category:', category

            url3 = 'http://www/website.com/' + param_2 + '&which=' + param_1
            file_pointer3 = urllib.urlopen(url3)
            html_object3 = BeautifulSoup(file_pointer3)
            result2 = json.loads(str(html_object3))

            for json2 in result2['DATA']:
                sub_category = json2[0]
                param_3 = sub_category.replace(' ','+').replace('&','%26')
                print '       sub_category:', sub_category

                for i in param_3:
                    if i == 'â':
                        print i
  ...

スクレイプを続行するには、4番目のURLリクエストの文字を置き換える必要があり'â'ますが、何を置き換えようとしても(、、u'\u2019'などâ)、。を取得しUnicodeEncodeErrorます。

文字列に変換param_3して(BeautifulSoup Navigable Stringデータ型であるため)置き換えようとしましたが、行を除いて同じエラーが発生しますstr(param_3)。私はついにこのforループの比較を試み、警告を受け取りました:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
if i == 'â':

私はここで途方に暮れています。この文字を翻訳して、他の文字に置き換えるにはどうすればよいparam_3ですか?

どんな助けでも大歓迎です!前もって感謝します!

4

1 に答える 1

1

BeautifulSoupUnicode文字列を返すため、操作する場合はUnicode文字列を使用してください。また、チェックしてくださいurllib.quote_plus。必要な交換が行われているようです。.encodeで使用する前に、Unicode文字列を使用する必要がありますquote_plus

于 2012-08-25T13:05:50.050 に答える