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)