Python_爬虫_二

代理

ProxyHandler处理器(代理)

1、代理的原理:在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的服务器的网站数据后,再转发给我们的代码。
2、http://httpbin.org/ip这个网站可以方便我们查看一些http请求参数
3、使用代理的方法:
ProxyHandle这个方法需要传入一个字典,key:请求schema,value:代理服务器ip+端口

from urllib import request
#
# url = 'http://httpbin.org/ip'
# rst = request.urlopen(url)
# print(rst.read())

# 使用代理服务器

    url = 'http://httpbin.org/ip'

# 1、使用ProxyHandler,传入代理构建一个handler
handler = request.ProxyHandler({'http': '113.58.232.168:22'})
# 2、使用上边创建的handler构建一个opener
opener = request.build_opener(handler)
# 3、使用opener去发送一个请求
resp = opener.open(url)
print(resp.read())

##Cookie

Cookie是指网站服务器为了辨别用户身份和进行session跟踪,而储存在浏览器上的文本文件,Cookie可以保持登陆信息到用户下次与服务器的会话。
以人人网为例,人人网中,如果要访问某个用户的主页,必须要登陆才能访问,登陆即是要有cookie信息。我们采用两种方法实现,第一种是使用浏览器访问,然后将cookie信息复制出来,放到header中:
# -- coding: UTF-8 --

from urllib import request

# 大鹏董成鹏的主页:http://www.renren.com/880151247/profile
# 人人网登陆页面:http://www.renren.com/SysHome.do

dapeng_url = 'http://www.renren.com/880151247/profile'
login_url = 'http://www.renren.com/SysHome.do'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit'
                  '/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
    'Cookie': 'anonymid=k02impal-tmpd25; depovince=GW; _r01_=1; JSESSIONID=abcYqcqOuNhffcBi8BYZw; ick_login=7c4d0511-c893-42c1-8fda-3564faa28a52; t=0eff0522ab61294e3bc281fe70aa325a0; societyguester=0eff0522ab61294e3bc281fe70aa325a0; id=972132120; xnsid=8dc4e96; jebecookies=9ab2903d-4f30-4a28-93f6-9ba3d660cdc7|||||; ver=7.0; loginfrom=null; jebe_key=19da0328-52ed-4a5e-9d8a-e1f55f4462e0%7C2dde9b9acea3b1be0942f6c86fb36dce%7C1567514411855%7C1%7C1567514413401; jebe_key=19da0328-52ed-4a5e-9d8a-e1f55f4462e0%7C2dde9b9acea3b1be0942f6c86fb36dce%7C1567514411855%7C1%7C1567514413403; wp_fold=0'
}

req = request.Request(url=dapeng_url, headers=headers)
resp = request.urlopen(req)
# print(resp.read().decode('utf-8'))
with open('renren.html', 'w', encoding='utf-8') as f:
    # python3 中,write函数必须写入一个str的数据类型
    # resp.read()返回的是一个bytes数据类型
    # bytes -> decode -> str
    # str -> encode -> bytes
    f.write(resp.read().decode('utf-8'))

    # -*- coding: UTF-8 -*-
    
    from urllib import request
    from urllib import parse
    from http.cookiejar import CookieJar
    

# 大鹏董成鹏的主页:http://www.renren.com/880151247/profile
# 人人网登陆页面:http://www.renren.com/SysHome.do
login_url = 'http://www.renren.com/PLogin.do'
dapeng_url = 'http://www.renren.com/880151247/profile'


def get_openner():
    # 1、创建一个cookiejar对象
    cookiejar = CookieJar()
    # 2、使用cookiejar创建一个HTTPCookieProcessor对象
    handler = request.HTTPCookieProcessor(cookiejar)
    # 3、使用上一步创建的handler创建一个opener
    opener = request.build_opener(handler)
    return opener

def login_renren(opener):
    # 5、使用opener来发送登陆的请求
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit'
                      '/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
    }
    data = {
        'email': 'xxxxxxxxxxxxx',
        'password': 'xxxxxx'
    }
    req = request.Request(login_url, headers=headers, data=parse.urlencode(data).encode('utf-8'))
    opener.open(req)

def visit_profile(opener):
    # 获取个人页面时,不需新建一个opener
    # 而应该使用之前的那个opener,因为之前的opener已经包含了登陆所需的cookie信息
    req = request.Request(dapeng_url)
    resp = opener.open(req)
    with open('renren1.html', 'w', encoding='utf-8') as f:
        f.write(resp.read().decode('utf-8'))

if __name__ == '__main__':
    opener = get_openner()

    login_renren(opener)
    visit_profile(opener)

保存和读取本地cookie

# -*- coding: UTF-8 -*-

from urllib import request
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar('test_cookie.txt')
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

resp = opener.open('http://httpbin.org/cookies/set?course=test')
cookiejar.save(ignore_discard=True)

# 加载cookie

cookiejar = MozillaCookieJar('test_cookie.txt')
cookiejar.load(ignore_discard=True)
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://httpbin.org/cookies')
for cookie in cookiejar:
    print(cookie)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值