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

来源:互联网 发布:淘宝卖家中心怎么找 编辑:程序博客网 时间:2024/05/21 11:27

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)
”’

阅读全文
0 0
原创粉丝点击