python语言 cookies处理 request,requests请求

1.cookie:当用户通过浏览器首次访问一个域名的时候,访问的web服务器会给客户端发送数据 ,以保持web服务器与客户端

之间的状态保持,这些数据就是cookie,他是Internet站点创建的,为了辨别用户身份而存储用户本地终端上的数据,cookie

大部分都是加密的,cookie存在于缓存中或者硬盘中,在硬盘中的是一些文件,当你访问该网站的时候,就会读取对应的网站

cookie信息,cookie有效的提升了用户体验,一般来说,一旦cookie保存在计算机上,则只有创建cookie的网站才能读取它

cookie模块是python中自带的模块,用来处理cookie相关事情

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener
from urllib.parse import urlencode
import ssl


ssl._create_default_https_context = ssl._create_unverified_context

# CookieJar有一些子类,分别是FileCookJar,LWPCookieJar,MoziliaCooieJar
# CookieJar 管理http生成的cookie,负责cookie的存储工作,向http当中添加指定的cookie

# 生成一个管理cookie的对象
cookie_obj=CookieJar()
#创建一个支持cookie的对象  ,对象属于HTTPCookieProcessor
cookie_handler=HTTPCookieProcessor(cookie_obj)
# urlopen(只能进行简单的请求 不支持在线验证,cookie,代理ip等复杂操作)
# build_opener内部的实现就是urlopen
# ------------------------------获取kooie
opener=build_opener(cookie_handler)
response=opener.open('http://www.baidu.com')
print(response)
for cookie in cookie_obj:
    print('key',cookie.name)
    print('key',cookie.value)

filename='neihan.txt'
# 设置cookie保存的文件
cookie_obj=LWPCookieJar(filename=filename)
cookie_handler=HTTPCookieProcessor(cookie_obj)
opener = build_opener(cookie_handler)
response=opener.open('http://neihanshequ.com')
# 保存cookie 到指定的文件当中去
# ignore 忽略
# ignore_expires=True   :即便目标cookie已经在文件中存在  任然对其写入
# ignore_discard=True    :即便cookie将要过期/已经过期  任然写入
cookie_obj.save(ignore_expires=True,ignore_discard=True)


# 使用本地cookie进行请求
cookie= LWPCookieJar()
cookie.load('neihan.txt')
request=Request('http://neihanshequ.com')
cookie_handler=HTTPCookieProcessor(cookie)
opener=build_opener(cookie_handler)
response=opener.open(request)
print(response.read().decode())


# 模拟登录美食杰-----------
cookie = LWPCookieJar(filename='meishi.txt')
cookie_handler=HTTPCookieProcessor(cookie)
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
# Mozilla/5.0 (Windows NT 6.1; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0
post_url='https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fi.meishi.cc%2Flogin.php%3Fac%3Dzhuce'
# urlencode对url当中的参数进行编码
# quote对url当中的中文进行编码
# urlencode()编码的对象为字典类型
# quote  编码的对象为字符串
post_data=urlencode({
    'username':'[email protected]',
    'password':'crd9411084210'

})
# 请求url  并传参  设置编码格式
request = Request(post_url,bytes(post_data,encoding='utf-8'))
response=opener.open(request)
print(response.read().decode())
cookie.save(ignore_discard=True,ignore_expires=True)
# 利用登录获取的cookie来请求美食杰首页
cookie=LWPCookieJar()
cookie.load('meishi.txt',ignore_discard=True,ignore_expires=True)
opener=build_opener(HTTPCookieProcessor(cookie))
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
request=Request('https://www.meishij.net/')
response=opener.open(request)
print(response.read().decode())

2.request请求:有时候我们需要用脚本模仿浏览器想服务器发送请求,这个时候首先需要打开浏览器进入调试功能,然后找到发送请求时浏览器所发送的数据,包括请求的header和数据部分

import requests
import json
from prettyprinter import pprint

class Weather(object):
    def __init__(self):
        # 获取本地信息
        self.location_url = 'http://api.map.baidu.com/location/ip?&ak=KQvhEkxc6mFCAYHTblC3NGVmxzxIWk0E&coor=bd09ll'
        # 获取天气信息
        self.weather_url = 'http://api.map.baidu.com/telematics/v3/weather?output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?&location='


    def start_spider(self):
        cityname=self.get_localtion()

        self.get_weather_info(cityname)
        while True:
            cityname = input('请输入城市的名字')
            if cityname == 'E':
                return
            self.get_weather_info(cityname)
    def get_localtion(self):
        response=requests.get(self.location_url)
        print(response)
        # 获取网页的内容
        print(response.content)
        # 将内容转化成字典对象
        result_dic=json.loads(response.content)
        pprint(result_dic)
        city=result_dic['content']['address_detail']['city']
        return city
    def get_weather_info(self,cityname):
        url=self.weather_url+cityname
        response=requests.get(url)
        print(response)
        weather_dic=json.loads(response.content)
        pprint(weather_dic)
        for daydic in weather_dic['results'][0]['weather_data']:
            print('{}'.format(daydic['date']))
            print('{}'.format(daydic['temperature']))

w=Weather()
w.start_spider()

3.requests使用python语言编写的,基于urllib

# requests是对urllib3的封装
import requests
url='http://www.baidu.com'
response=requests.get(url)
# <Response [200]>请求成功
print(response)
# 获取网页文本内容
print(response.text)
# reason:原因
# 请求成功
print(response.reason)
# link:跳转的地址
print(response.links)
# history:历史
print(response.history)
#获取网页的编码格式
print(response.apparent_encoding)
# 设置响应的编码格式为网页的编码格式
response.encoding=response.apparent_encoding
# 获取网页内容,获取的是二进制形式的
print(response.content)
# 获取网页cookie
print(response.cookies)
# 获取响应头信息
print(response.headers)
# 获取请求网址
print(response.request.url)

猜你喜欢

转载自blog.csdn.net/crq_zcbk/article/details/81411786