模擬登錄是定向爬蟲制作中一個必須克服的問題,只有這樣才能爬取到更多的內(nèi)容。

實現(xiàn)微博登錄的" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Python定向爬蟲模擬新浪微博登錄

Python定向爬蟲模擬新浪微博登錄

時間:2023-05-20 16:18:02 | 來源:網(wǎng)站運營

時間:2023-05-20 16:18:02 來源:網(wǎng)站運營

Python定向爬蟲模擬新浪微博登錄:當(dāng)我們試圖從新浪微博抓取數(shù)據(jù)時,我們會發(fā)現(xiàn)網(wǎng)頁上提示未登錄,無法查看其他用戶的信息。

模擬登錄是定向爬蟲制作中一個必須克服的問題,只有這樣才能爬取到更多的內(nèi)容。

實現(xiàn)微博登錄的方法有很多,一般我們在模擬登錄時首選WAP版。

因為PC版網(wǎng)頁源碼中包括很多的js代碼,提交的內(nèi)容也更多,不適合機器模擬登錄。

我們實現(xiàn)微博登錄的大體思路是這樣的:

原理很簡單,讓我們一步一步來實現(xiàn)吧。

一.抓包利器Fiddler

在電腦和互聯(lián)網(wǎng)之間的通信是通過不同的數(shù)據(jù)包收發(fā)來實現(xiàn)的。

Fiddler可以從中間對數(shù)據(jù)進行攔截,拷貝一份數(shù)據(jù)以后再將數(shù)據(jù)發(fā)送給目的端。(這也是為什么說咖啡館的公共WIFI不安全的原因)

同類的還有WireShark。為何這兒不用WireShark呢?

Wireshark太過于專業(yè)了,它可以實現(xiàn)抓取各種包,抓下來的包也很亂,針對性沒Fiddler那么強。

  1.下載地址:http://www.telerik.com/fiddler

  2.安裝方法:fiddler依賴.Net環(huán)境,如果已經(jīng)有則無需配置,直接點擊下一步就行。

  1.啟動Fiddler

  2.配置Fiddler

    點擊左上角的“ WinConfig”,找到你使用的瀏覽器并勾選,點擊“Save Changes”

  3.使用Fiddler開始抓包

    打開瀏覽器訪問WAP版新浪微博網(wǎng)站weibo.cn

    Fiddler窗口左側(cè)找到http://weibo.cn /pub/的數(shù)據(jù)包,并雙擊,這時我們就能夠在右側(cè)看到抓取到的信息.

    找到Cookies字段,這正是我們需要的.

二.Cookies與保持登錄

    維基百科是這樣解釋的:

Cookie(復(fù)數(shù)形態(tài)Cookies),中文名稱為“小型文本文件”或“小甜餅”,指某些網(wǎng)站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)。
通俗來說就是服務(wù)器端為了確認用戶終端的身份而設(shè)定的一種加密標(biāo)識,它是存儲在本地終端上的。

當(dāng)然,隨著Cookies技術(shù)的發(fā)展,Cookies的作用已經(jīng)不止于用戶身份標(biāo)識。

當(dāng)?shù)顷懸粋€網(wǎng)站時,網(wǎng)站往往會請求用戶輸入用戶名和密碼,并且用戶可以勾選“下次自動登錄”。

如果勾選了,那么下次訪問同一個網(wǎng)站時,用戶會發(fā)現(xiàn)沒輸入用戶名和密碼就已經(jīng)登錄了。

這正是因為前一次登陸時服務(wù)器發(fā)送了包含登錄憑據(jù)(用戶名+密碼的某種加密形式)的Cookie到用戶的硬盤上。

第二次登錄時,如果該Cookies尚未到期,瀏覽器會發(fā)送該Cookies,服務(wù)器驗證憑據(jù),于是不必輸入用戶名和密碼就讓用戶登錄了。

三.Cookies模擬登錄

下面將介紹使用 Fiddler 獲取新浪微博 Cookies,然后使用 Requests 提交 Cookies 從而實現(xiàn)模擬登錄。

    使用Fiddler抓取數(shù)據(jù)包.

    打開新浪微博WAP版頁面(http://weibo.cn),點擊登錄,然后填寫賬號密碼,勾選“記住登錄狀態(tài)”,切記要勾選此項.

登錄成功后,從Fiddler中選擇最新的那個http://weibo.cn,然后復(fù)制Cookies字段的內(nèi)容,填寫到代碼內(nèi).

代碼如下:

#!/usr/bin/env python#coding=utf8import urllib2import re'''遇到不懂的問題?Python學(xué)習(xí)交流群:1004391443滿足你的需求,資料都已經(jīng)上傳群文件,可以自行下載!'''# get your cookie from Fiddler11cookie = 'your-cookie'headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0', 'cookie': cookie}def visit(): url = 'http://weibo.com' req = urllib2.Request(url, headers=headers) text = urllib2.urlopen(req).read()# print the title, check if you login to weibo sucessfully pat_title = re.compile('<title>(.+?)</title>') r = pat_title.search(text) if r: print(r.group(1))if __name__ == '__main__': visit()

四.使用 Post 提交數(shù)據(jù)的方法實現(xiàn)模擬登錄

由于使用Cookies登錄存在很多的弊端,一般我們都使用Post提交數(shù)據(jù)的方法來實現(xiàn)模擬登錄.

大部分網(wǎng)站登錄時需要攜帶cookie,所以我們還必須設(shè)置cookie處理器來保證cookie.

notice:如果遇到登錄后網(wǎng)站重定向到其他url這種情況,我們可以使用chrome的審查元素功能找出重定向后的網(wǎng)站url和該網(wǎng)站的提交數(shù)據(jù),再次使用post方法就行.

代碼如下:

import HTMLParser import urlparse import urllib import urllib2 import cookielib import string import re #登錄的主頁面 hosturl = '******' //自己填寫 #post數(shù)據(jù)接收和處理的頁面(我們要向這個頁面發(fā)送我們構(gòu)造的Post數(shù)據(jù)) posturl = '******' //從數(shù)據(jù)包中分析出,處理post請求的url #設(shè)置一個cookie處理器,它負責(zé)從服務(wù)器下載cookie到本地,并且在發(fā)送請求時帶上本地的cookie cj = cookielib.LWPCookieJar() cookie_support = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) #打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數(shù)據(jù)時就有cookie了,否則發(fā)送不成功) h = urllib2.urlopen(hosturl) #構(gòu)造header,一般header至少要包含一下兩項。這兩項是從抓到的包里分析得出的。 headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1', 'Referer' : '******'} #構(gòu)造Post數(shù)據(jù),他也是從抓大的包里分析得出的。 postData = {'op' : 'dmlogin', 'f' : 'st', 'user' : '******', //你的用戶名 'pass' : '******', //你的密碼 'rmbr' : 'true', //特有數(shù)據(jù),不同網(wǎng)站可能不同 'tmp' : '0.7306424454308195' //特有數(shù)據(jù),不同網(wǎng)站可能不同 } #需要給Post數(shù)據(jù)編碼 postData = urllib.urlencode(postData) #通過urllib2提供的request方法來向指定Url發(fā)送我們構(gòu)造的數(shù)據(jù),并完成登錄過程 request = urllib2.Request(posturl, postData, headers) print request response = urllib2.urlopen(request) text = response.read() print text作者:北島知寒

源自:定向爬蟲 - Python模擬新浪微博登錄

關(guān)鍵詞:爬蟲,模擬

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉