Python成长之路——urllib库

模拟浏览器发送请求的库,Python自带
urllib模块 调用的方法 说明
urllib.request urlopen(url) 请求url,并返回请求url所有的内容
urlretrieve(url,path) 请求url,并将url反馈的内容保存到path路径下
urllib.parse quote url编码函数,将中文进行转化为%xxx
unquote url解码函数,将%xxx转化为指定字符
urlencode 给一个字典,将字典拼接为query_string,并且实现了编码的功能

urllib.request请求后反馈的response

response 调用的方法 说明
response read() 读取相应的内容,内容是字节类型
geturl() 获取请求的url
getheaders() 获取头部信息,列表里面有元素
getcode() 获取状态码
readline() 按行读取,放回列表,都是字节类型
get方式
  • 构建请求头部信息(这是反爬第一步)
  • 伪装自己的UA,让服务器认为你是浏览器在访问
  • 构建请求对象:url = urllib.request.Request(url=url,headers=header)
    其中header= {“User-Agent”: “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36”}
  • 请求链接:urllib.request.urlopen(request_url)
post方式
from urllib import request,parse

url = "https://fanyi.baidu.com/sug"
word = input(">>>:")
from_data={
    "kw": word
}
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"}
# 伪装请求头
request_url = request.Request(url=url,headers=header)
# 表单数据处理
from_data = parse.urlencode(from_data).encode()
response = request.urlopen(request_url,data=from_data)
ret = response.read().decode()
print(ret)
发送请求的两种方式
  • urlopen
    urllib.request.urlopen()
  • opener
    #创建一个handler
    handler = urllib.request.HTTPHandler()
    #通过handler创建一个opener
    opener = urllib.request.build_opener(handler)
    #构建请求对象
    request = urllibb.request.Request(url = url,headers = headers)
    #发送请求
    response = opener.open(request)
    # open 与 URLopen用法是一样的,只不过open用法更高级
    
    动态设置代理IP
    from urllib import request
    
    url = "https://www.baidu.com/s?ie=UTF-8&wd=ip"
    #创建handler
    handler = request.ProxyHandler({"http":"需要配置的代理ip:代理ip的端口号"})
    opener = request.build_opener(handler)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"}
    request_url = request.Request(url,headers=headers)
    response = opener.open(request_url)
    with open("ip.html","wb") as f:
        f.write(response)
    
模拟cookie登陆
  1. 手动登陆后,通过fidder抓包工具获取登陆请求的链接以及登陆的请求数据
  2. 真实的模拟浏览器,当发送完post请求的时候,将cookie保存到代码中
    from urllib import request
    from http import cookiejar
    # 真实的模拟浏览器,当发送完post请求的时候,将cookie保存到代码中 保存在opener中
    # 创建一个cookiejar对象
    cj = cookiejar.CookieJar()
    # 通过cookiejar创建一个handler
    handler = request.HTTPCookieProcessor(cj)
    # 根据handler创建一个opener
    opener = request.build_opener(handler)
    # 登陆请求的ajax的地址
    post_url = "http://www.renren.com/"
    # 登陆需要的参数
    formdata = {}
    # 请求头信息
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"}
    request_url = request.Request(post_url,headers=headers)
    response = opener.open(request_url)
    # 下面就可以爬取登陆之后的页面数据了 
    
  3. 如果可以进行模拟登陆的话,cookie就从登陆中直接获取,若是模拟登陆不了的话,那么就在headers中加入登陆后的cookie值进行抓去登陆后的页面
requests

requests是urllib的一个封装
使用requests对对数据进行访问

安装:pip install requests
用来做什么:和urllib是同一个位置
headers = {}
data = {}
get请求
定制头部
requests.get(url,headers=headers,params=data)
post请求
定制头部
requests.get(url,headers=headers,data=data)
响应对象
r.text 字符串形式查看响应
r.content 字节类型查看响应
e.encoding 查看或者设置编码类型
r.status_code 查看状态码
r.headres查看响应头部
r.url 查看所请求的url
r.json() 查看json格式数据

import requests

#如果碰到会话相关的话题,首先要先创建一个会话
#往下所有的操作都是通过创建会话后的对象去访问
s = requests.Session()

post_url = ""
headers = {}
formdata = {}
res = s.post(url=post_url,headers=headers,data=format())

你可能感兴趣的:(Python)