python 抓取知乎

来源:互联网 发布:数据分析助理 编辑:程序博客网 时间:2024/05/16 20:30

刚入门python,本着就是干的原则,从小项目开始。

今天在抓取网页的时候遇到了问题。

import urllib.requesturl="http://www.fafu.edu.cn"#url="http://www.zhihu.com"m=urllib.request.urlopen(url).read()#m.decode("utf-8").encode('')f=open('/Users/HYN/Desktop/url.txt','wb')f.write(m)f.close()print(m)


我在用以上代码抓取第一个网址的时候能正常得到结果,但是当我抓取知乎的时候,却得到了一堆这个:

1f8b 0800 14c7 c055 02ff ed3c 6993 d44696df fd2b e4da 0987 2702 75e9 3e30 dd130e1f 3b1e 8f77 f08c 3766 bd0e 4747 4a4a75c9 5449 4252 f5c1 c446 806d 3047 73ad018f 01db c0c0 181f 74e3 616c 9a6e 1a22f6af b854 d57c e22f cc4b 5d25 d521 aaba1b9b 1d86 a0bb ba52 99ef 65be fb65 bed4ae67 5ffe dd4b 6fbd bdfb 15aa 1634 ea53cfec 221f 541d d933 9395 7d35 faa5 ffa89036 8c0c f868 e000 517a 0d79 3e0e 262bcdc0 a495 4ada 6ca3 069e ac20 d7ad 63da0a9a 36f6 69f8 52a1 74c7 0eb0 1d44 8f68cb98 1478 8e93 055e 61b2 91b5 2070 69bcb769 cd4e 56fe 8bfe cf17 e997 9c86 8b024bab e3dc f0d7 5e99 c4c6 0cde a1d7 3c07

于是百度之,无解。谷歌之,无解。stack overflow之,有解!

知乎的源码经过了压缩,所以需要gzip

国外的大神给出了两种方法:

第一种:

<span style="font-family: Arial, Helvetica, sans-serif;">import gzip</span>
<span style="font-family: Arial, Helvetica, sans-serif;">m = urllib.request.urlopen(url,).read()</span>
data = gzip.decompress(m).decode("utf-8")with open('/Users/HYN/Desktop/url.txt','w') as f:    f.write(data)


第二种:
import requestsr = requests.get(url)data = r.content.decode("utf-8")


参照第一种方法修改代码:

#encoding="utf-8"import urllib.requestimport gzipurl="http://www.zhihu.com"m=urllib.request.urlopen(url,).read()data = gzip.decompress(m).decode("utf-8")with open('/Users/HYN/Desktop/url.txt','w',encoding='utf-8') as f: f.write(data)f.close()

顺便提一句,这段代码之前报错 UnicodeEncodeError: 'ascii' codec can't encode characters in position 265-289: ordinal not in range(128)

后来在open('....','w') 后加上endcoding=‘utf-8’即可



0 0
原创粉丝点击