您的位置:首页 > 产品设计 > UI/UE

比urllib更为强大的requests的一些使用技巧

2017-06-05 13:03 375 查看

coding = utf-8

import requests

import re

”’

那么GET请求,如果要附加额外的信息一般是怎样来添加?没错,那就是直接当做参数添

加到url后面。

比如现在我想添加两个参数,名字name是germey,年龄age是22。构造这个请求链接是不

是我们要直接写成r = requests.get(“http://httpbin.org/get?name=germey&age=22“)?

可以是可以,但是不觉得很不人性化吗?一般的这种信息数据我们会用字典{“name”: “ge

rmey”, “age”: 22}来存储,那么怎样来构造这个链接呢?

同样很简单,利用params这个参数就好了。

data = {‘name’:’germey’,’age’:22}

r = requests.get(‘http://httpbin.org/get‘,params=data)

print(r.text)

”’

”’

网页的返回类型实际上是str类型,但是它很特殊,是Json的格式,所以如果我们想直接

把返回结果解析,得到一个字典dict格式的话,可以直接调用json()方法。

r = requests.get(‘http://httpbin.org/get‘)

print(type(r.text))

print(r.json())

print(type(r.json))

”’

”’

如上的请求链接返回的是Json形式的字符串,那么如果我们请求普通的网页,那么肯定

就能获得相应的内容了。

下面我们以知乎-发现页面为例来体验一下:

headers = {‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36’}

r = requests.get(“https://www.zhihu.com/explore“, headers=headers)

pattern = re.compile(‘explore-feed.?question_link.?>(.*?)’, re.S)

titles = re.findall(pattern,r.text)

print(titles)

”’

”’

抓取二进制数据

r = requests.get(‘https://github.com/favicon.ico‘)

with open(‘favicon.ico’,’wb’) as f:

f.write(r.content)

f.close()

在这里用了open()函数,第一个参数是文件名称,第二个参数代表以二进制写的形式打开,

可以向文件里写入二进制数据,然后保存。

运行结束之后,可以发现在文件夹中出现了名为favicon.ico的图标。

同样的,音频、视频文件也可以用这种方法获取。

”’

”’

设置代理:

对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模爬取,对于大规模且频繁的请求,网站可能会直接登录验证,验证码,甚至直接把IP给封禁掉。+

那么为了防止这种情况的发生,我们就需要设置代理来解决这个问题,需要用到proxies这个参数。

用这样的方式设置:

import requests

proxies = {

“http”: “http://10.10.1.10:3128“,

“https”: “http://10.10.1.10:1080“,

}

requests.get(“https://www.taobao.com“, proxies=proxies)

”’

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: