python 抓取知乎

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

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

import urllib.request

url="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 d446
96df fd2b e4da 0987 2702 75e9 3e30 dd13
0e1f 3b1e 8f77 f08c 3766 bd0e 4747 4a4a
75c9 5449 4252 f5c1 c446 806d 3047 73ad
018f 01db c0c0 181f 74e3 616c 9a6e 1a22
f6af b854 d57c e22f cc4b 5d25 d521 aaba
1b9b 1d86 a0bb ba52 99ef 65be fb65 bed4
ae67 5ffe dd4b 6fbd bdfb 15aa 1634 ea53
cfec 221f 541d d933 9395 7d35 faa5 ffa8
9036 8c0c f868 e000 517a 0d79 3e0e 262b
cdc0 a495 4ada 6ca3 069e ac20 d7ad 63da
0a9a 36f6 69f8 52a1 74c7 0eb0 1d44 8f68
cb98 1478 8e93 055e 61b2 91b5 2070 69bc
b769 cd4e 56fe 8bfe cf17 e997 9c86 8b02
4bab 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 requests

r = requests.get(url)

data = r.content.decode("utf-8")


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

#encoding="utf-8"
import urllib.request
import gzip

url="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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值