python 网页编码问题 还是?

ashang1988 2018-05-28 05:56:32
 
#!/usr/bin/python
# -*- coding: utf-8 -*-

'''

'''
import urllib.request, sys
import re

file_path = sys.path[0] + "\\wea.txt"
'''
代表名单
'''
def get_congress(num_value, type):
url = "http://www.npc.gov.cn/delegate/dbmd.action?id=" + num_value
request=urllib.request.Request(url)
#url = "http://www.npc.gov.cn/delegate/dbmd.action?id=4028819f6178f1fb0162b7fcf0700001"
#获取页面信息
html = urllib.request.urlopen(request)
res = html.read().decode(type)

#正则表达式信息
pattern = '"tit1">(.+)</div>'
Title = re.search(pattern,res).group(1)
#代表编号
pattern = 'dbid=(\d*)'
number = re.findall(pattern, res)
#代表姓名
pattern = '"_blank">(.+)</a>'
names = re.findall(pattern, res)

length = len(number)
#print(length)
print ("\n%35.30s\n"%Title)
text_str = Title + '\r\n'
for i in range (0,length):
print ('%25.20s'%number[i], '\t%s'%names[i])
text_str += " " + number[i] + ' \t' + names[i] + '\r\n'
return text_str

#使用代理获取local 名单
def proxy_get_congress(num_value, type):
#访问网址
url = "http://www.npc.gov.cn/delegate/dbmd.action?id=" + num_value
#这是代理IP
proxy = {'http':'106.46.136.112:808'}
#创建ProxyHandler
proxy_support = urllib.request.ProxyHandler(proxy)
#创建Opener
opener = urllib.request.build_opener(proxy_support)
#添加User Angent
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36')]
#安装OPener
#urllib.request.install_opener(opener)
#使用自己安装好的Opener
#response = urllib.request.urlopen(url)

response = urllib.request.urlopen(url)
#读取相应信息并解码
res = response.read().decode(type)

#正则表达式信息
pattern = '"tit1">(.+)</div>'
Title = re.search(pattern,res).group(1)
#代表编号
pattern = 'dbid=(\d*)'
number = re.findall(pattern, res)
#代表姓名
pattern = '"_blank">(.+)</a>'
names = re.findall(pattern, res)

length = len(number)
#print(length)
print ("\n%35.30s\n"%Title)
text_str = Title + '\r\n'
for i in range (0,length):
print ('%25.20s'%number[i], '\t%s'%names[i])
text_str += " " + number[i] + ' \t' + names[i] + '\r\n'
return text_str
if __name__=="__main__":

#c4 是重庆 我人在重庆 无法获取
proxy_get_congress("c4", 'gbk')
#get_congress("c4", 'gbk')


其他省份的获取正常. 看网页源码编码格式是utf-8 但解析需要gbk,不知道为什么?

获取我所在地省份重庆时,其他省份获取正常的方法就不行了,报错:
UnicodeDecodeError:'gbk' code can not decode byte 0xaa in position 2066:illegal mutibyte sequence

utf-8 其他省份解码也是失败.

我使用代理也是同样的错误
window7 python3.6.5-32bit

谁知道怎么弄
...全文
292 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashang1988 2018-05-28
  • 打赏
  • 举报
回复
谢谢楼上,试了下可以了
oyljerry 2018-05-28
  • 打赏
  • 举报
回复
它网页编码有点问题,有些字符可能不是符合规范,是GBK编码,可以忽略错误
res = html.read().decode(type, 'ignore')
ashang1988 2018-05-28
  • 打赏
  • 举报
回复
不在重庆的兄弟试一下 运行正常不, 会报错不?

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧