簡體   English   中英

Python網站抓取python並解析數據

[英]Python website scraping python and parsing data

我是Python初學者,在抓取網頁並顯示頁面中的特定文本時遇到了麻煩。

我知道我的問題出在編碼方面,因為我一直在閱讀unicode類型 ,並且看到其他新手也遇到了完全相同的問題。

例如,假設我想抓取www.amazon.com,這是我擁有的代碼

import pycurl
import cStringIO
from bs4 import BeautifulSoup

buf = cStringIO.StringIO()

curl = pycurl.Curl()
curl.setopt(curl.URL, 'http://www.amazon.com')
curl.setopt(curl.WRITEFUNCTION, buf.write)
curl.perform()

result = buf.getvalue()
result = unicode(result, "ascii", errors="ignore")
buf.close()

soup = BeautifulSoup(result)
print soup.get_text()

這會將亞馬遜網頁返回到結果變量。 但是,當嘗試使用beautifulsoup get_text()方法時,出現了煩人的錯誤:

UnicodeEncodeError:'ascii'編解碼器無法在位置25790編碼字符u'\\ u2026':序數不在范圍內(128)

如何確保/解碼curl請求中返回的內容的全部結果。

您可能想使用請求,它更簡單,更簡潔,並且AFAIK避免了編碼問題。

from bs4 import BeautifulSoup
import requests

resp = requests.get('http://www.amazon.com')

bsoup = BeautifulSoup(resp.text)
print(bsoup.get_text())

有使用CURL的理由,但是在大多數情況下,請求變得越來越簡單,並且根據您的描述,您的情況看起來也不是例外。

編輯:要解決unicode錯誤,請嘗試將字符串明確編碼為utf-8(根據 SO問題):

encoded = resp.text.encode('utf-8')
bsoup = BeautifulSoup(encoded)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM