cookie
適用於抓取需要登入才能訪問的頁面**
http協議為無連線協議,
cookie: 存放在客戶端瀏覽器,
session: 存放在web伺服器
1、先登入成功1次,
獲取到攜帶登陸資訊的cookie
登入成功 - 個人主頁( - f12抓包 - 重新整理個人主頁 - 找到主頁的包(home)
一般cookie都在all--> home 資料報中, 2
、攜帶著cookie發請求
importrequests
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
(html)
self.parse_html(html)
#可獲取並解析整個人人網內需要登入才能訪問的位址
defparse_html(self,html):
passif
__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: 正常請求去獲取頁面資訊
importrequests
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()')
(r_list)
if__name__ == '
__main__':
spider =renrenspider()
spider.get_html()
1、把抓取到的cookie處理為字典
2、使用requests.get()中的引數:cookies
importrequests
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()
(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()')
(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...