python-43:兩個重要的問題

在模擬登陸中,還有兩個重要的問題,前面一直找不到提出來的機會,在這裏一塊兒提一下,這兩個問題就是 headers 內容的增長和 cookies 的有效期
1. headers 內容的增長
    咱們先看一張圖和兩段代碼php

代碼1:python

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方法,顯示的內容不少,我這裏只是截取了一部分,你們能夠本身去看一下cookie

咱們先來看一些名詞,"module","class","methods", 這三個單詞翻譯成中文就是 模塊,類,方法,這是面向對象編程的一些基本的概念,有興趣的同窗能夠本身去看,可是我如今並不打算詳細的講解這個,我就這麼簡單的說吧,urllib2是python裏面的一個模塊,urllib2這個模塊裏面有不少的類,Request 就是其中的一個類,像前面使用到的urlopen也是一個類,而Request這個類裏面有不少的方法,好比,add_date,add_headers,等等。python裏面該怎麼找一個模塊裏面含有什麼類,一個類裏面含有什麼方法呢,作法有不少種編輯器

  1. 查看相關的文檔,或者查看函數原型等等
    ide

  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 的時效性ui

    咱們在登陸網站的時候通常會有"七天以內自動登陸"或者"一個月內自動登陸"的選項,這個就是cookies的時效性,有的cookies長有的cookies短,咱們在程序編碼的時候不可能知道這個網站的cookies能持續多長時間,你們也能夠對比一下我這篇文章裏使用的cookies和上一次代碼中寫的cookies不同,那麼,這種狀況下應該怎麼辦呢

答案只能是獲取最新的那個cookies,也就是最後一次打開網頁的cookies,方法前面我其實已經說過了,還記得我在41小節的時候說的使用瀏覽器查看cookies嗎?

"按F12調出控制檯而後按F5刷新"

這裏的F5刷新就是刷新網頁,保證獲取到的cookies是最新的

相關文章
相關標籤/搜索