python - beautifulsoup 解析后的内容的编码问题
高洛峰
高洛峰 2017-04-17 17:46:45
[Python讨论组]

写了个爬取手机信息的爬虫,用beautifulsoup解析。查了下资料,发现beautifulsoup最后输出是以unicode编码,把爬取的图片名放入一变量后,该变量不能作为新建文件的文件名。
网站地址 http://product.pconline.com.cn/mobile/

部分代码

import requests
from bs4 import BeautifulSoup

url = 'http://product.pconline.com.cn/mobile/'
header = {
    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"
}
response = requests.get(url, headers=header)
html = response.text

soup = BeautifulSoup(html, 'html5lib')
items = soup.find_all('p', class_='item-pic')

#对解析出来的每款手机模拟点击,提取手机名字和手机图片
for item in items:
    name = item.a.img.get('alt')
    link = item.a.get('href')
    print name, link
    product_page = requests.get(link)
    soup2 = BeautifulSoup(product_page.text, 'html5lib')
    pic_link = soup2.find_all('img', width="360", height="270", limit=1)[0]
    print pic_link
    pic_src = pic_link['#src']
    pic_name = pic_link['alt']
    print pic_src, pic_name #pic_name是从soup2中提取的手机名,pic_src是图片url
    
    # Save the picture
    pic = requests.get(pic_src)
    fp = open('phone_pic\\' + pic_name + '.jpg', 'wb')
    fp.write(pic.content)
    fp.close()

运行的结果是无法对文件进行写操作。
报错信息:

fp = open('phone_pic\\' + pic_name + '.jpg', 'wb')
IOError: [Errno 2] No such file or directory: u'phone_pic\\\u534e\u4e3aMate8/3GB+32GB\u7248 \u524d\u89c6.jpg'

可以看到是pic_name的中文仍然是Unicode编码。而打印print默认的编码是utf-8,可以成功输出中文。那么怎么把pic_name这些Unicode字符串转换成写操作可以接受的编码?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
ringa_lee
pic_name = pic_name.encode("utf-8")

注意你的文件名!
你的pic_name

windows下文件名要求:

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号