2

http://www.olx.pt/carros-cat-378-p-1を解析しようとしています。URL の最後の番号を変更することで、ページを繰り返し処理できます。このページは、meta タグの Content-Type に ISO-8859-1 を指定しています。そこで、from_encoding 引数で BeautifulSoup に伝えます。

ただし、時々、find_all を実行すると、長さゼロの結果セットが返されます。スープを調べると、すべてが化けていることがわかります。ゼロの ResultSet を取得し、cp1252 や latin1 などの別の文字セットに切り替えたときにキャッチしようとしました。

すべての HTML が文字化けするのは本当に奇妙だと思います。また、これが発生したときにどの文字セットが使用されているかがわからないのは、本当に奇妙だとさえ思います。ここで何が起こっているのか、誰にも手がかりがありますか?

コード

import mechanize
import cookielib
from bs4 import BeautifulSoup


def getNewBrowser():
    # create browser instance
    b = mechanize.Browser()

    # create a cookiejar for cookies
    jar = cookielib.LWPCookieJar()
    b.set_cookiejar(jar)

    # prevent mechanize from simulating a 403 disallow
    b.set_handle_robots(False)

    # handle some other stuff
    b.set_handle_equiv(True)
    #b.set_handle_gzip(True)
    b.set_handle_redirect(True)
    b.set_handle_referer(True)

    # follows refresh 0 but not hangs on refresh >0
    b.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

    # want debugging messages?
    #br.set_debug_http(True)
    #br.set_debug_redirects(True)
    #br.set_debug_responses(True)

    # User-Agent
    b.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0')]
    return b



def run():
    b = getNewBrowser()
    url = "http://www.olx.pt/carros-cat-378-p-"
    n = 100
    for i in range(1,n):
        urlt = url + str(i)
        b.open(urlt, timeout = 10.0)
        soup = BeautifulSoup(b.response(), from_encoding="ISO-8859-1")
        print "--------------------------------------------------------------------"
        print "page: " + str(i)
        print "--------------------------------------------------------------------"
        print soup


if __name__ == '__main__':
    run()
4

1 に答える 1

0

replace() を使用して、ページ コンテンツで宣言されているエンコーディングを「utf-8」に置き換えることができます。少しハックですが、それが私にとってはうまくいきました。

ページのコンテンツを BeautifulSoup に渡す前に:

page_content.replace('charset="ISO-8859-1"','charset=utf-8')
于 2014-03-14T22:34:11.127 に答える