作用:发送网络请求,返回响应数据
import requests
# 目标的url
url = 'https://www.baidu.com'
# 向目标发送get请求,接受返回的数据
response = requests.get(url)
# 打印网页源码
print(response.text)
获取网页源码常用的三种方式:
response的常用属性:
# 请求参数的用法
kw = {'wd':'长城'}
requests.get(url,params=kw)
# 第二种方法是将参数写在目标url后面
# url = 'https://www.baidu.com/s?wd='长城'
# requests.get(url)
从用户的 headers 进行反爬是最常见的反爬虫策略,相应的解决措施是
把相应的 headers 传输给 python 的 requests,模拟浏览器请求,获取和浏览器一致的内容
# 在header中添加"User-Agent",模拟浏览器请求
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
requests.get(url, headers=headers)
目标url一定要找准确
传递的参数一定要和浏览器发送的post参数一致
用法:
import requests
import json
def fanyi_baidu():
# 1.请输入 翻译的内容
translate_content = input('请输入 翻译的内容:')
# 2.url
url = 'http://fy.iciba.com/ajax.php?a=fy'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36'
}
# 3.传递参数
data = {
"f": "auto",
"t": "auto",
"w": translate_content
}
# 4.请求数据
response = requests.post(url, data=data, headers=headers)
# 5.输出翻译结果
# print(response.content.decode())
# 6. 字符串 转成 字典
dict_data = json.loads(response.content.decode())
result = dict_data['content']['word_mean']
print('翻译的结果是:',result)
if __name__ == '__main__':
fanyi_baidu()
作用:
使用requests处理cookie有三种方法:
1.cookie字符串放在headers中
headers中的cookie:使用分号(;)隔开,左边的表示cookie的键,右边的表示cookie的值
headers = {
"Cookie":" Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74; _xsrf=2|d1a3d8ea|c5b07851cbce048bd5453846445de19d|1522379036"}
cookies = {"cookie的name":"cookie的value"}
requests.get(url,headers=headers,cookies=cookie_dict}
3.用requests提供的session模块
requests 提供了一个叫做session类,来实现客户端和服务端的会话保持
会话保持有两个内涵:
保存cookie,下一次请求会带上前一次的cookie
实现和服务端的长连接,加快请求速度
使用方法\
session = requests.session()
response = session.get(url,headers)
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
作用:\
请求使用的协议可以分为:
不同分类的代理,在使用的时候需要根据抓取网站的协议来选择
# 用法:
proxies = {
"http": "http://12.34.56.79:9527",
"https": "https://12.34.56.79:9527",
}
requests.get(url, proxies = proxies)
使用requests获取的resposne对象,具有cookies属性,能够获取对方服务器设置在本地的cookie
response.cookies是CookieJar类型,使用requests.utils.dict_from_cookiejar,能够实现把cookiejar对象转化为字典
解决方案:
添加一个’verify’参数
response = requests.get(url,verify=False)
在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错
超时参数(timeout)使用方法如下:
response = requests.get(url,timeout=3)
通过添加timeout参数,能够保证在3秒钟内返回响应,否则会报错
retrying 模块的使用
1.使用retrying模块提供的retry模块
2.通过装饰器的方式使用,让被装饰的函数反复执行
3.retry中可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行
from retrying import retry
#最大重试3次,3次全部报错,才会报错
@retry(stop_max_attempt_number=3)
def parse_url(url)
#超时的时候会报错并重试
response = requests.get(url, headers=headers, timeout=3)
return response