scrapy 请求某繁体网站内容不一样,这是为啥?

2018-12-28 14:14:40 +08:00
 Ewig

http://www.hkexnews.hk/APP/SEHKAppMainIndex_c.htm

这个网站我用 request 请求没有问题 但是 scrapy 就出现下面字体

††††††††††††††㌮‼愠桲敦㴢卅䡋䅐偌楳瑥摃慳敟挮桴洢㻥랲諥뢂㰯愾㰯獴牯湧㸼⽰㸍ਠ††††††††††††††‼瀠慬楧渽≬敦琢㸼獴牯湧㸍ਠ††††††††††††††‴⸠㱡⁨牥昽≨瑴瀺⼯睷眲⹨步确敷献桫⽎敷┲が楳瑩湧猯䅰灬楣慴楯渥㈰偲潯春㈰慮搥㈰偈䥐⽒整畲湥搯䵡楮┲あ潡牤㽳损污湧㵺栭䡋∾ꯧ馼鸼⽡㸼⽳瑲潮朾㰯瀾㱢爾㱰⁡汩杮㴢汥晴∾㱳瑲潮朾駨ꢻ㨼⽳瑲潮朾㱴慢汥㸍ਠ††††††††††††††††‼瑲㸍ਠ†††††††††††††††††‼瑤㻢鞏㰯瑤㸍ਠ†††††††††††††††††‼瑤㻦ꂹ髤뢻뿤뢊苨ꚏ蟧견臥薫䇧ꮠ諥뢂蓧钟ꧧꞑ胥薬룯벌뛥邍뇧떐뻦鲉豂跥궗ꗤ붜駨궘舼⽴搾ഊ†††††††††††††††††㰯瑲㸍ਠ††††††††††††††††‼瑲㸍ਠ†††††††††††††††††‼瑤㻢鞏㰯瑤㸍ਠ†††††††††††††††††‼瑤㻥薷跥邌闧ꖨ諦麶诧骄볨ꆌ뫯벌뛥邍뇧떐뻦鲉豗跥궗ꗤ붜駨궘舼⽴搾ഊ†††††††††††††††††㰯瑲㸍ਠ†††††††††††††††‼⽴慢汥㸍ਠ††††††††††††††‼⽰㸍ਠ†††††††††††††‼⽤楶㸼⽳灡渾㰯瑤㸍ਠ††††††††††‼⽴爾ഊ†††††††††††㱴爾ഊ††††††††††††㱴搠捯汓灡渽∲∾㱳灡渠楤㴢印慮ㄢ⁣污獳㴢灭楮束扬慣欱㑢∾㱤楶⁳瑹汥㴢摩獰污示楮汩湥∾㰯摩瘾㰯獰慮㸼⽴搾ഊ†††††††††††㰯瑲㸍ਠ††††††††††‼呒㸍ਠ†††††††††††‼呄⁣潬印慮㴢㈢㸼獰慮⁣污獳㴢灭楮朱㈢㸼獴牯湧㸼扲㸼扲㸼瀾돨ꮋ裦鲬諨膆諥뺌蟦隙蘼⽰㸼⽳瑲潮朾㰯獰慮㸼⽔䐾ഊ†††††††††††㰯呒㸍ਠ††††††††††‼瑲㸍ਠ†††††††††††‼瑤⁣潬印慮㴢㈢㸍ਠ††††††††††††‼瑡扬攠獴祬攽≷楤瑨㨶〰灸∠捬慳猽≴慢汥彧牥祟扯牤敲猭牴敔慢汥ⵂ汵敔慢汥彃䡉∠獵浭慲礽∢⁷楤瑨㴢㘰〢㸍ਠ†††††††††††††‼瑢潤社ഊ†††††††††††††††㱴爾ഊ††††††††††††††††㱴搠睩摴栽∵〢㸼業朠獲挽∯業慧支獰慣敲⹧楦∠睩摴栽∵〢⁨敩杨琽∵∾㰯瑤㸍ਠ†††††††††††††††‼瑤⁷楤瑨㴢㠰∾들뮽㰯瑤㸍ਠ†††††††††††††††‼瑤⁷楤瑨㴢㐷〢㸼愠桲敦㴢卅䡋奥慲㈰ㄳ彣⹨瑭∾㈰ㄳ㰯愾♮扳瀻♮扳瀻㱡⁨牥昽≓䕈䭙敡爲〱㑟挮桴洢㸲〱㐼⽡㸦湢獰㬦湢獰㬼愠桲敦㴢卅䡋奥慲㈰ㄵ彣⹨瑭∾㈰ㄵ㰯愾♮扳瀻♮扳瀻㱡⁨牥昽≓䕈䭙敡爲〱㙟挮桴洢㸲〱㘼⽡㸦湢獰㬦湢獰㬼愠桲敦㴢卅䡋奥慲㈰ㄷ彣⹨瑭∾㈰ㄷ㰯愾♮扳瀻♮扳瀻㱡⁨牥昽≓䕈䭙敡爲〱㡟挮桴洢㸲〱㠼⽡㸦湢獰㬦湢獰㬼⽴搾ഊ†††††††††††††††㰯瑲㸍ਠ††††††††††††††‼瑲㸍ਠ†††††††††††††††‼瑤㸼⽴搾ഊ††††††††††††††††㱴搠捯汳灡渽∲∾㱡⁨牥昽≄潣畭敮瑳⽓䕈䭃潮獯汩摡瑥摉湤數彣⹸汳∠瑩瑬攽∢⁴慲来琽≟扬慮欢㻤뢋觧뚜裧뒢锼⽡㸼⽴搾ഊ†††††††††††††††㰯瑲㸍ਠ†††††††††††††‼⽴扯摹㸍ਠ††††††††††††‼⽴慢汥㸍ਠ†††††††††††‼⽴搾ഊ†††††††††††㰯瑲㸍ਠ††††††††††‼瑲㸍ਠ†††††††††††‼瑤⁣潬印慮㴢㈢㸼獰慮⁩搽≓灡渱∠捬慳猽≰浩湧彧牥礱㌵戢㸼摩瘠獴祬攽≤楳灬慹㩩湬楮攢㸼扲㸼⽤楶㸼⽳灡渾㰯瑤㸍ਠ††††††††††‼⽴爾ഊ†††††††††††㱴爾ഊ††††††††††††㱴搠捯汓灡渽∲∾㱳灡渠捬慳猽≶敲摟扬

2106 次点击
所在节点    Python
11 条回复
leefsfd
2018-12-28 14:16:42 +08:00
编码问题.
liaowy
2018-12-28 14:55:00 +08:00
resp.text.encode('latin-1').decode('utf-8')
carlclone
2018-12-28 14:59:32 +08:00
这都不知道还玩爬虫呢....
lihongjie0209
2018-12-28 15:07:32 +08:00
In [10]: response.body.decode(encoding="utf-8")
Out[10]: '\ufeff<html lang="en" class="news-hkex">\r\n <head>\r\n <META http-equiv="Content-Type" content="text/html; charset=utf-16">\r\n <meta name="MS.LOCALE" content="ZH-TW">\r\n <title>:: HKEX :: HKEXnews ::</title>\r\n <meta http-equiv="Pragma" content="no-cache">\r\n <meta http-equiv="Cache-Control" content="no-cache">\r\n <meta charset="UTF-8">\r\n <meta name="viewport" content="width=device-width, initial-scale=1">\r\n <meta http-equiv="X-UA-Compatible" content="IE=edge">\r\n <link href="/ncms/css/main.css" rel="stylesheet"><script language="javascript" src="/script/hkex_common.js"></script><script language="javascript" src="/script/hkex_setting.js"></script><script type="text/javascript" src="/ncms/script/hkex_app.js"></script><script type="text/javascript" src="/ncms/script/hkex_settings.js"></script><script type="text/javascript" src="/ncms/script/hkex_widget.js"></script><script type="text/javascript" src="/ncms/script/vendor.js"></script><script type="text/javascript">\n \t var pageDefaultTitle = "申請版本,聆訊後資 料集及相關資料";\n \t var pageDefaultSubTitle = "";\n \t var pageDefaultBanner = "/ncms/media/HKEXnews/top_banner_bg.png";\n \t var pageDefaultTabletBanner = "/ncms/media/HKEXnews/top_banner_bg_tablet.png";\n \t var overrideBreadcrumb = [{\n \t \t\ttitle: "申請版本,聆訊後資料集及相關資料",\n \t \t\turl: "http://www2.hkexnews.hk/New-Listings/Application-Proof-and-PHIP?sc_lang=zh-HK"\n \t },{\n \t \t\ttitle: "新上市",\n \t \t\turl: window.location.href\n \t \t\t}]\n \t var overridePageTools = {};\n \t overridePageTools.showlastupdate = 0;\n \t overridePageTools.showprint = 0;\n\t\t </script><link rel="stylesheet" href="/css/hkex_css.css" type="text/css"><script type="text/javascript">\n\t\t\t\t\t\tfunction PrintFriendlyUTF()
lanqing
2018-12-28 16:04:24 +08:00
从表面上看,scrapy 请求返回的数据被 decode(使用 latin-1|ISO-8859-1),所以 encode('latin-1').decode('utf-8')就行
#2 #4 都行
dfadf55
2018-12-28 16:05:21 +08:00
@carlclone 你一开始就知道
Ewig
2018-12-28 16:40:47 +08:00
@lanqing 你用 scrapy 试过吗?我试过打印的是空
print(response.text.encode('latin-1').decode('utf-8')) 我这样写的
Ewig
2018-12-28 16:43:18 +08:00
@lanqing 你是对的,我 scrapy 里面的编码没弄过,谢谢
Ewig
2018-12-29 10:50:48 +08:00
@lihongjie0209 def parse(self, response):
print(response.body.decode(encoding="utf-8"))
linkList =response.body.decode(encoding="utf-8").xpath(
'//td[@class="pming_black12 ms-rteTableOddCol-BlueTable_CHI"]/a/@href')
nameList = response.body.decode(encoding="utf-8").xpath(
'//td[@class="pming_black12 ms-rteTableOddCol-BlueTable_CHI"]/a/text()')

我在 scrapy 里面这样写好像不行,说这是字符串没有 xpath,如何写才是正确的
lihongjie0209
2018-12-29 11:00:21 +08:00
@Ewig 你还是多搞搞基础吧, 没办法一步一步教你
atencheung
2018-12-29 14:05:24 +08:00
编码的问题,我一般是这么解决的
import requests
response = requests.get('http://xxxxxx')
response.encoding = "gbk2312" # 这里就是对方网站的编码格式
print(response.text)
这样一般就该返回的正常的,不会乱码了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521872

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX