返回信息流http://wanke.etao.com/api/ajax.php?_ksTS=1410261665421_937&spm=0.0.0.0.nfYXR&mdList=p_dp_new&format=json&n=10&epid=9226088&wk_tk=7f5912f17b4e3ed97bfe36a5d2c7561e&host=&pageindex=1&pagesize=10
在浏览器下输入上面这个URL, 可以看到是有大量数据出来的,但是在python下,用以下代码去抓取时
req = urllib2.Request(self.url, headers = self.headers)
request = urllib2.urlopen(req)
html = request.read()
charset = chardet.detect(html)
print charset['encoding'] + '编码'
html = html.decode(charset['encoding'], 'ignore')
print html
request.close()
看到结果却是:
在网页里,data所对应的值是大量的html代码,但是用python抓取时,这里却变成了空的,这是什么原因
这是一条镜像帖。来源:北邮人论坛 / python / #3318同步于 2014/9/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
python抓取的网页源码,打印出来时与网页上不一致
melot
2014/9/9镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这是一段json字符串,需要先解析json,然后把data的值取出来,这才是你要的html。
另外,这里的html是utf-8编码的,不需要再decode了。
我按你说的去取json里面的值,不过取出来的还是跟我原来一样,只有一个<ul> </ul>
下面是代码
req = urllib2.Request(self.url, headers = self.headers)
request = urllib2.urlopen(req)
jsonData= request.read()
charset = chardet.detect(jsonData)
print charset['encoding'] + '编码'
decodeJson = json.loads(jsonData)
html = decodeJson['resultList']['p_dp_new']['data']
#html = html.decode(charset['encoding'], 'ignore')
print 'the html is ' + html
request.close()
【 在 Chon 的大作中提到: 】
: 这是一段json字符串,需要先解析json,然后把data的值取出来,这才是你要的html。
: 另外,这里的html是utf-8编码的,不需要再decode了。
我试过没问题。
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2
>>> request = urllib2.urlopen("http://wanke.etao.com/api/ajax.php?_ksTS=1410261665421_937&spm=0.0.0.0.nfYXR&mdList=p_dp_new&format=json&n=10&epid=9226088&wk_tk=7f5912f17b4e3ed97bfe36a5d2c7561e&host=&pageindex=1&pagesize=10")
>>> data = request.read()
>>> import json
>>> jsondata = json.loads(data)
>>> print jsondata['resultList']['p_dp_new']['data']
<ul> <li clear="clearfix"> <div class="trait-left"> <div href="#" class="avatar avatar-size32" target="_blank">
...
可以了,之前是因为程序里URL少了一个&,所以没取到东西
【 在 Chon 的大作中提到: 】
: 我试过没问题。
: Python 2.7.5 (default, Mar 9 2014, 22:15:05)
: [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
: ...................
按你的方法已经成功取到想要的数据,但是有一些不明白的地方,想问一下,
1. 我如果不通过json来获取,直接抓取那个网页的数据,得到的数据是\u**\u**这种编码,然后我尝试了各种编码方式都 无法将其转成中文,
2. 如果通过json来获取data的值,不用decode的情况下可以获得中文,但是如果我用了decode,它就会无法显示中文
3. 你之前说里面的html是用utf-8编码的,不需要decode,这是为什么? decode不是将某种编码转成unicode编码吗,而且我想知道你之前是怎么看出里面的html是用utf-8编码的?
求解答[ema23]
【 在 Chon 的大作中提到: 】
: 这是一段json字符串,需要先解析json,然后把data的值取出来,这才是你要的html。
: 另外,这里的html是utf-8编码的,不需要再decode了。
\u** 就是unicode字符串,当然不用decode。
【 在 melot 的大作中提到: 】
: 按你的方法已经成功取到想要的数据,但是有一些不明白的地方,想问一下,
: 1. 我如果不通过json来获取,直接抓取那个网页的数据,得到的数据是\u**\u**这种编码,然后我尝试了各种编码方式都 无法将其转成中文,
: 2. 如果通过json来获取data的值,不用decode的情况下可以获得中文,但是如果我用了decode,它就会无法显示中文
: ...................
来自「北邮人论坛手机版」