爬虫(3)——Proxyhander代理ip && cookie

目录

 

 

ProxyHandler处理器(代理设置)

保存cookie到本地

从本地加载cookie


 

ProxyHandler处理器(代理设置)

代理原理:在请求目的网站之前,先向代理服务器发送请求,代理服务器向目的网站发送请求,代理服务器拿到目的网站的数据之后再转发给我们的代码。

from urllib import request
url="http://httpbin.org/ip"
#使用request.ProxyHandler传入一个代理,为一个字典,字典的key是HTTP或者HTTPS,依赖于代理服务器能##够接收的类型,值是IP+Port
hander=request.ProxyHandler({"HTTP":"171.35.222.87:9999"})
#使用上一步创建的hander,用request.build_opener创建一个opener对象
opener=request.build_opener(hander)
#使用opener.open来发出请求
resp=opener.open(url)

#resp=request.urlopen(url)
print(resp.read())

Cookie

主要是解决爬取需要登录的网站内容的东西之一

实例:爬取人人网,需要先登录,然后寻找Cookie之后

url="http://www.renren.com/974116704/newsfeed/photo"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36ver",
         "Cookie":"anonymid=k8d9ntgz-chlbj3; depovince=HLJ; _r01_=1; ick_login=9b597f59-f7c6-4c67-bd41-5dd6d912dd0c; taihe_bi_sdk_uid=6d875d3a66282173dc97b8e1279ece88; taihe_bi_sdk_session=c1fcbe37d94c6f6fe04b1865243d9ecd; _de=4F52035F7FAC50D09573810E2D51E8D56DEBB8C2103DE356; t=3313ba90a117522e95365655eb151b304; societyguester=3313ba90a117522e95365655eb151b304; id=974116704; xnsid=d8d77737; ver=7.0; loginfrom=null; jebe_key=69ef23b7-8212-4e97-aefd-b649328d9ecd%7Cd7bf2a181c8c14da74b98711ecbe222c%7C1585499903436%7C1%7C1585499902474; wpsid=15826951404051; wp_fold=0; jebecookies=b3652280-54d9-4137-bb9f-00bf4a108d10|||||"}
req=request.Request(url,headers=headers)
resp=request.urlopen(req)
#print(resp.read().decode('utf-8'))
with open('renern.html','w',encoding='utf-8') as fp:
    #write函数必须写入一个str的数据类型
    #resp.read()读出来的是一个bytes数据类型
    #bytes->decode->str
    #str->encode->bytes
    fp.write(resp.read().decode('utf-8'))
    #如果没有Cookie,输出是登陆的界面
    #加上了Cookie则为登录之后的页面

实例:爬取人人网,不需要登录,程序自动登录,然后自动寻找Cookie

from urllib import request
from http.cookiejar import CookieJar
from urllib import parse
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36ver"}
def get_opener():

    #1.登录
    #1.1创建一个cookiejar的对象
    cookiejar=CookieJar()
    #1.2使用cookiejar创建一个HTTPCookieProcess对像
    handers=request.HTTPCookieProcessor(cookiejar)
    #1.3使用上一步创建的hander创建一个opener
    opener=request.build_opener(handers)
    return opener

def log_renern(opener):
    data={
        "email":"",
        "password":""
    }
    login_url="http://www.renren.com/SysHome.do"
    req=request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers)
    opener.open(req)

def visit_renern(opener):
    denglu_url="http://www.renren.com/974116704/newsfeed/photo"
    req=request.Request(denglu_url,headers=headers)
    #此时的opener 已经包含了cookie信息
    resp=opener.open(req)
    with open("renern.html",'w',encoding='utf-8') as fp:
        fp.write(resp.read().decode('utf-8'))


if __name__=="__main__":
    opener=get_opener()
    log_renern(opener)
    visit_renern(opener)

保存cookie到本地

from http.cookiejar import MozillaCookieJar
from urllib import request

cookiejar=MozillaCookieJar("cookie.txt")
hander=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(hander)
resp=opener.open("http://httpbin.org/cookies/set?course=abc")
cookiejar.save()

cookie.txt里面没有任何内容,因为这个cookie是过期的

from http.cookiejar import MozillaCookieJar
from urllib import request

cookiejar=MozillaCookieJar("cookie.txt")
hander=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(hander)
resp=opener.open("http://httpbin.org/cookies/set?course=abc")
cookiejar.save(ignore_discard=True)

从本地加载cookie

cookiejar=MozillaCookieJar("cookie.txt")
cookiejar.load(ignore_discard=True)
# hander=request.HTTPCookieProcessor(cookiejar)
# opener=request.build_opener(hander)
# resp=opener.open("http://httpbin.org/cookies/set?course=abc")

#cookiejar.save(ignore_discard=True)
for cookie in cookiejar:
    print(cookie)

发布了35 篇原创文章 · 获赞 4 · 访问量 2338

猜你喜欢

转载自blog.csdn.net/devilangel2/article/details/105172659