【发布时间】:2017-10-15 00:22:23
【问题描述】:
运行我的代码时,我收到此错误
UnicodeEncodeError: 'ascii' codec can't encode character '\u0303' in position 71: ordinal not in range(128)
这是我的全部代码,
from urllib.request import urlopen as uReq
from urllib.request import urlretrieve as uRet
from bs4 import BeautifulSoup as soup
import urllib
for x in range(143, 608):
myUrl = "example.com/" + str(x)
try:
uClient = uReq(myUrl)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
container = page_soup.findAll("div", {"id": "videoPostContent"})
img_container = container[0].findAll("img")
images = img_container[0].findAll("img")
imgCounter = 0
if len(images) == "":
for image in images:
print('Downloading image from ' + image['src'] + '...')
imgCounter += 1
uRet(image['src'], 'pictures/' + str(x) + '.jpg')
else:
for image in img_container:
print('Downloading image from ' + image['src'] + '...')
imgCounter += 1
uRet(image['src'], 'pictures/' + str(x) + '_' + str(imgCounter) + '.jpg')
except urllib.error.HTTPError:
continue
尝试过的解决方案:
我尝试将.encode/decode('utf-8') 和.text.encode/decode('utf-8') 添加到page_soup,但它给出了这个错误。
AttributeError: 'str' / 'bytes' 对象没有属性 'findAll' 或
【问题讨论】:
-
在哪一行抛出错误?
-
将 page_soup 转换为字符串意味着它不再是 BeatifulSoup 对象。所以你不能使用
findAll。哪一行报错了? -
在 uRet() [即 urlretrieve]
-
所以其中的一个字符串没有以 uRet 理解的方式编码。我相信您想
encode任何字符串,然后再将其放入uRet。可能是images['src'].encode('utf-8')。 -
尝试将
.encode('utf-8)放入images['src']但它给了我:TypeError: cannot use a string pattern on a bytes-like object
标签: python encoding utf-8 beautifulsoup