python-43:两个重要的问题

在模拟登录中,还有两个重要的问题,前面一直找不到提出来的机会,在这里一起提一下,这两个问题就是 headers 内容的增加和 cookies 的有效期
1. headers 内容的增加
    我们先看一张图和两段代码

python-43:两个重要的问题_第1张图片

代码1:

user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
headers = {'User-Agent':user_agent}

代码2:

user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0'
host = 'www.lvye.org'
referer = 'http://www.lvye.org/index.php'
cookies = 'PHPSESSID=8e1mu8g2akohgtdvlitv314ct3; lvyebbs=290738b8c90d8cf97c03922248ba629e134e944a1248e7351eded398c4bb6b1a'
 
heasers = {'User-Agent':user_agent,
           'Host':host,
           'Referer':referer,
           'Cookie':cookies}

这是爬虫代码中关于headers的部分,我们前面也提到过,图片中heahers有很多的内容,我们在编写代码时并不知道我们要使用哪一个,我当时给出的方法是,发现不成功的时候再将headers里面的内容一个一个的加上去。首先肯定的是这个方法是没有错的,但是,我们可以有很多种做法去实现它,比如,你可以用代码2中的方法,先定义变量然后加入字典,这种做法也没有错,但实际上还有另外一种方法,我们先来看代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = '217小月月坑'

'''
 另一种headers的形式
'''

import urllib2
# 要登陆的网址

url = 'http://www.lvye.org/userinfo.php?uid=409557'
request = urllib2.Request(url)
# 另一种加入headers的方法
request.add_header("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0")
request.add_header("Host", "www.lvye.org")
request.add_header("Referer", "http://www.lvye.org/index.php")
request.add_header("Cookie", "lvyebbs=290738b8c90d8cf97c03922248ba629e134e944a1248e7351eded398c4bb6b1a; PHPSESSID=edqhc21p48l4js6rg0eo3vafm0")

response = urllib2.urlopen(request)
print response.read()

这里我们使用了另一种方法:request.add_header,这个"request."引起了我的注意,这不是使用urllib2.Request创建的请求吗,所以到头来还是要看这个函数,前面在第12小节的时候我们已经稍微的讲解了urllib2.Request这个函数,为了便于理解那时只讲了很小的一部分,毕竟那个时候还用不到那么多。怎么查看函数前面也已经说了,使用python自带的help方法,显示的内容很多,我这里只是截取了一部分,大家可以自己去看一下

python-43:两个重要的问题_第2张图片

我们先来看一些名词,"module","class","methods", 这三个单词翻译成中文就是 模块,类,方法,这是面向对象编程的一些基本的概念,有兴趣的同学可以自己去看,但是我现在并不打算详细的讲解这个,我就这么简单的说吧,urllib2是python里面的一个模块,urllib2这个模块里面有很多的类,Request 就是其中的一个类,像前面使用到的urlopen也是一个类,而Request这个类里面有很多的方法,比如,add_date,add_headers,等等。python里面该怎么找一个模块里面含有什么类,一个类里面含有什么方法呢,做法有很多种

  1. 查看相关的文档,或者查看函数原型等等

  2. python对于类和方法的引用是以"."来引用的,在很多python专门的ide和编辑器中,只要输入模块,然后"."就会有很多的候选项,然后在里面找到你想要的

至于request.add_header,我们知道request是这么来的: request = urllib2.Request(url),用专业的话来说request是urllib2.Request这个类里面的一个实例,所以它继承了urllib2.Request里面的所有特性。或者一种简单的说法是,使用urllib2.Request 生成的request就是Request这个类克隆出来的一个儿子,它跟Request一模一样,只是名字不一样,而且它可以使用Request里面的方法

2. cookies 的时效性

    我们在登录网站的时候一般会有"七天之内自动登录"或者"一个月内自动登录"的选项,这个就是cookies的时效性,有的cookies长有的cookies短,我们在程序编码的时候不可能知道这个网站的cookies能持续多长时间,大家也可以对比一下我这篇文章里使用的cookies和上一次代码中写的cookies不一样,那么,这种情况下应该怎么办呢

答案只能是获取最新的那个cookies,也就是最后一次打开网页的cookies,方法前面我其实已经说过了,还记得我在41小节的时候说的使用浏览器查看cookies吗?

"按F12调出控制台然后按F5刷新"

这里的F5刷新就是刷新网页,保证获取到的cookies是最新的


你可能感兴趣的:(python,爬虫)