爬蟲 cookie模擬登陸

2021-09-26 22:46:47 字數 4573 閱讀 5911

cookie

適用於抓取需要登入才能訪問的頁面**

http協議為無連線協議,

cookie: 存放在客戶端瀏覽器,

session: 存放在web伺服器

1、先登入成功1次,

獲取到攜帶登陸資訊的cookie

登入成功 - 個人主頁( - f12抓包 - 重新整理個人主頁 - 找到主頁的包(home)

一般cookie都在all--> home 資料報中, 2

攜帶著cookie發請求

import

requests

​class

renrenlogin(object):

def__init__

(self):

#url為需要登入才能正常訪問的位址

self.url = '

'#headers中的cookie為登入成功後抓取到的cookie

self.headers =

#獲取個人主頁響應

defget_html(self):

html = requests.get(url=self.url,headers=self.headers,verify=false).text

print

(html)

self.parse_html(html)

#可獲取並解析整個人人網內需要登入才能訪問的位址

defparse_html(self,html):

pass​if

__name__ == '

__main__':

spider =renrenlogin()

spider.get_html()

requests模組提供了session類,來實現客戶端和服務端的會話保持​

1、例項化session物件

session = requests.session()

2、讓session物件傳送get或者post請求

res = session.post(url=url,data=data,headers=headers)

res = session.get(url=url,headers=headers)​

3. 思路梳理

瀏覽器原理: 訪問需要登入的頁面會帶著之前登入過的cookie

程式原理: 同樣帶著之前登入的cookie去訪問 - 由session物件完成

1、例項化session物件

2、登入**: session物件傳送請求,登入對應**,把cookie儲存在session物件中

3、訪問頁面: session物件請求需要登入才能訪問的頁面,session能夠自動攜帶之前的這個cookie,進行請求

具體步驟

1、尋找登入時post的位址

2、傳送使用者名稱和密碼資訊到post的位址

* 使用者名稱和密碼資訊以字典的方式傳送

鍵 :<

input

>標籤中name的值(email,password)

值 :真實的使用者名稱和密碼

post_data =

程式實現

1、先post: 把使用者名稱和密碼資訊post到某個位址中

2、再get: 正常請求去獲取頁面資訊

import

requests

from lxml import

etree

class

renrenspider(object):

def__init__

(self):

self.post_url = '

'self.get_url = '

'#email和password為節點中name的屬性值

self.form_data = #

密碼 self.session = requests.session() #

例項化session會話保持物件

self.headers =

#先post 再get

defget_html(self):

#先post,把使用者名稱和密碼資訊post到乙個位址

self.session.post(url=self.post_url, data=self.form_data, headers=self.headers)

#再session.get()個人主頁

html = self.session.get(url=self.get_url, headers=self.headers).text

self.parse_html(html)

defparse_html(self, html):

parse_html =etree.html(html)

r_list = parse_html.xpath('

//li[@class="school"]/span/text()')

print

(r_list)

if__name__ == '

__main__':

spider =renrenspider()

spider.get_html()

1、把抓取到的cookie處理為字典

2、使用requests.get()中的引數:cookies

import

requests

from lxml import

etree

class

renrenlogin(object):

def__init__

(self):

#url為需要登入才能正常訪問的位址

self.url = '

'self.headers =

#將字串cookie轉為字典格式

defget_cookie_dict(self):

cookie_dict ={}

cookies = '

td_cookie=18446744073093166409; anonymid=jzc3yiknvd9kwr; depovince=gw; jebecookies=67976425-f482-44a7-9668-0469a6a14d16|||||; _r01_=1; jsessionid=abcp_jugwa4rdcgwxqtyw; ick_login=f502b729-d6cb-4085-8d74-4308a0a8a17d; _de=4dbcfcc17d9e50c8c92bcdc45cc5c3b7; p=cae86d9f12c5a1ba30901ad3d6ac992f5; first_login_flag=1; ln_uact=13603263409; ln_hurl= t=6d191b90a0236cea74f99b9d88d3fbd25; societyguester=6d191b90a0236cea74f99b9d88d3fbd25; id=967469305; xnsid=6cbc5509; ver=7.0; loginfrom=null; jebe_key=bd6eb791-92b2-4141-b8ed-53d17551d830%7c2012cb2155debcd0710a4bf5a73220e8%7c1565838783310%7c1%7c1565838784555; jebe_key=bd6eb791-92b2-4141-b8ed-53d17551d830%7c2012cb2155debcd0710a4bf5a73220e8%7c1565838783310%7c1%7c1565838784558; wp_fold=0

'for kv in cookies.split('; '

):

#kv: 'td_cookie=184***'

key = kv.split('='

)[0]

value = kv.split('

=')[1]

cookie_dict[key] =value

return

cookie_dict

#獲取個人主頁響應

defget_html(self):

#獲取cookies

cookies =self.get_cookie_dict()

print

(cookies)

html = requests.get(url=self.url, headers=self.headers, cookies=cookies, ).text

self.parse_html(html)

#可獲取並解析整個人人網內需要登入才能訪問的位址

defparse_html(self, html):

parse_html =etree.html(html)

r_list = parse_html.xpath('

//*[@id="operate_area"]/div[1]/ul/li[1]/span/text()')

print

(r_list)

if__name__ == '

__main__':

spider =renrenlogin()

spider.get_html()

cookie 處理 以及模擬登陸

2.自動處理 使用fidder 抓包工具抓取 請求資料報 from lxml import etree from urllib import request url headers page text requests.get url url,headers headers text 解析驗證碼 登...

Python爬蟲模擬登陸豆瓣

coding utf 8 import requests,re from pil import image class doubanspider object def init self self.session requests.session def login self,username,pa...

Scrapy中用cookie模擬登陸新浪微博

最近想做乙個微博的搜尋頁文字分析的小專案,因為開放平台裡這個api的限制略多,決定進入爬蟲坑自己動手 之前久聞scrapy大名,嘗試了一下,抓取網頁甚是好用,避免了許多http方面的繁瑣處理 不過還是卡在了登陸這一步上 在scrapy中具體實現時,就是在爬取的spider類中,過載start req...