python爬虫利器之requests库

requests库

源码传送门

requests库借助了urllib3库,相较于urllib库,代码更加简单,爬虫效率更高。

1.安装

在cmd中执行下列代码来安装requests库。

pip install requests

2.请求

2.1.GET请求

我们直接使用requests.get()方法创建请求对象,例如,

import requests

response = requests.get("http://www.baidu.com")  # get()方法中的参数为所爬网页的url地址

requests库中获取可以通过.text或.content返回数据。注意,.text会在返回数据的时候自动进行解码,可能会出现解码错误;而.content会直接返回字节流数据,需要我们自己通过decode()方法自行解码。例如,

print(response.text)  # unicode格式的数据,自动解码
print(type(response.text))

print(response.content)  # 返回字节流数据
print(response.content.decode('utf-8'))

我们还可以返回以下数据,

print(response.url)  # 返回完整的url地址
print(response.encoding)  # 返回响应头的字符编码
print(response.status_code)  # 返回响应码

如果我们需要以GET方法传入相关数据,需要给requests.get()传入params参数。注意,这里传入的数据不需要通过urlencode()进行处理,直接以字典的形式传入即可。

同样,为了防止服务器发现我们是爬虫,需要给给requests.get()传入header参数。

例如,我们要获取使用百度搜索得到的python的相关结果,

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}

params = {
    'wd': 'python',
}  # 相关参数

response = requests.get("http://www.baidu.com", params=params, headers=headers)
print(response.content.decode('utf-8'))

2.2.POST请求

POST请求需要使用requests.post()方法。

与urllib的POST请求相同,我们只需给requests.post()方法添加data参数,即可实现POST请求。

例如,我们要爬取有道翻译的翻译结果,

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"  # url地址

keyword = input("请输入要查询的单词:")  # 输入要翻译的单词

data = {
    "i": keyword,
    "from": "AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "client": "fanyideskweb",
    "salt": "15936963039542",
    "sign": "f0ca3de0336ac08733c16d04ced62633",
    "ts": "1593696303954",
    "bv": "971477db6e42007c994a2623150c1717",
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_CLICKBUTTION",
}  # 传入相关data参数,相关参数可以在浏览器的“检查”-“网络”中找到

response = requests.post(url, data=data, headers=headers)

# 处理获取的数据
dic = response.json()
print(dic['translateResult'][0][0]['tgt'])

3.代理

为了防止IP地址被封,我们需要使用代理来爬取数据。

我们只需给requests.get()方法传入proxies参数即可实现代理。注意,proxies参数必须是字典形式,键为网络协议名称,值为IP地址加端口号。例如,

import requests
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}

ip_lists = [
    {'http': 'http://125.108.92.173:9000'},
    {'http': 'http://113.128.25.249:9999'},
    {'http': 'http://122.4.45.140:9999'},
    {'http': 'http://36.248.129.170:9999'},
]

proxy = random.choice(ip_lists)  # 随机选取一个代理IP地址

response = requests.get("http://httpbin.org/ip", proxies=proxy, headers=headers)
print(response.text)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值