鱼C论坛

 找回密码
 立即注册
查看: 1707|回复: 3

python3 爬虫 遇到带声标的字母。。出现乱码

[复制链接]
发表于 2019-11-7 22:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬好,最近练练手,爬取一个城市编码的网站到excel表,站点如下:

http://hotel.alitrip.com/area.ht ... ;enName=&page=1

结果遇到一个搞不定的乱码问题,就是字母上面带有声标,结果爬取结果就出现乱码,而且乱码不仅仅一种,试了很久都搞不定,所以很头疼

具体例子:打开上述网站,查找  Ro?  ,会找到  K?mpóng Ro?

爬取到excel的结果是:  K?mpóng Ro?

其他例子暂时不列举吧,想做到的是网站什么数据,excel就什么数据要用什么方法呢,而且网站里有的数据都不能丢失,要全部爬取,源代码如下:


  1. import time
  2. import requests
  3. import re
  4. import openpyxl


  5. def get_resps(page, country_ENname=''):
  6.     headers = {
  7.         'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
  8.     }
  9.     urls = []
  10.     for i in range(1, page+1):
  11.         url = "http://hotel.alitrip.com/area.htm?domestic=1&enName=" + country_ENname + "&page=" + str(i)
  12.         urls.append(url)
  13.     print(f'总共网址数:{len(urls)}' )
  14.     resps = []
  15.     a = 1
  16.     print('爬取中......')
  17.     for url in urls:
  18.         print(a)
  19.         resp = requests.get(url, headers=headers)
  20.         resps.append(resp)
  21.         time.sleep(2)
  22.         a += 1
  23.     print(f'响应数量:{len(resps)}')
  24.     return resps

  25. def write(all_list):
  26.     wb = openpyxl.load_workbook('编码.xlsx')
  27.     sheet = wb.get_sheet_by_name('Sheet1')
  28.     for each in all_list:
  29.         sheet.append(each)
  30.     wb.save('编码.xlsx')


  31. def parse(resps):
  32.     targets = []
  33.     for each in resps:
  34.         target = re.findall('<tr class="tr-city"><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>', each.text)
  35.         targets.extend(target)
  36.     print(len(targets))
  37.     return targets


  38. def main():
  39.     resps = get_resps(1)
  40.     targets = parse(resps)
  41.     #print(targets[435:445])
  42.     write(targets)


  43. if __name__ == '__main__':
  44.     start = time.time()
  45.     main()
  46.     end = time.time()
  47.     print(end - start)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-8 07:11:55 | 显示全部楼层
本帖最后由 geen 于 2019-11-8 09:21 编辑

网页的编码是GBK,python是utf-8,excel是unicode,编码的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 18:53:46 | 显示全部楼层
geen 发表于 2019-11-8 07:11
网页的编码是GBK,python是utf-8,excel是unicode,编码的问题。

这个我查到资料了。可是具体要怎么弄。。萌新试了很久没弄出来。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-9 19:39:07 | 显示全部楼层
本帖最后由 geen 于 2019-11-9 20:20 编辑
luoydqsn 发表于 2019-11-8 18:53
这个我查到资料了。可是具体要怎么弄。。萌新试了很久没弄出来。。。


去翻翻openpyxl的官方文档,看编码这块的说明。
从网页到py的编码是 res.encoding('GBK')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-6 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表