Python豆瓣登陸終於

間斷性了解Python一段時間,小有收穫。在N天前學習別人得代碼用python登陸了基乎,但是現在知乎登陸界面改了,要驗證得信息太多,充分應用了JavaScript,HTML,CSS等Fuck技術,直接放棄,轉而模擬登陸豆瓣。

<PS:不知道登陸賬號以後再爬蟲會不會被封掉IP,是需要保持request.session嗎?還是需要保存cookies?這個是以後需要做的事情。因為之前之前爬蟲豆瓣被封掉過Orz>

採用的Chrome瀏覽器,F12抓包(抓包具體是啥?),Chrome比搜狗之類的要好用一些,應該是最近看習慣了。


起始地址為:

url=https://accounts.douban.com/login

通過輸入賬號,密碼,驗證碼(不登錄成功就可以),返回一些數據。

login_Data

以上,看到再headers中有From Data數據。

在Data數據中我們可以通過多次錯誤實驗看到哪些值改變了。實際改變的是form_emial(賬號),form_password(密碼),captcha-solution(驗證碼:這個是直接的字母很好驗證),captcha-id(通行證之類的)

captcha-id:即當前你打開網頁後,會存在這麼一個值,你下次再登陸時會把這個值傳入Data中,如果登陸不成功,返回的網頁中同樣還會有captch-id。

captcha-solution:當然在你獲取到當前網頁時候,可以看到驗證碼。所以在下一次登陸時,傳入這個驗證碼就可以了

所以:在Elements下面,我們分別Ctr+F搜索上面那個關鍵字

captcha-id,captcha_image

可見,他們在div塊下面,而且有一個時id屬性(最近學到的,id屬性值時唯一的)

doc=pq(html)ID=doc(.captcha_block input:last-child)//獲取第二個input標籤#print(type(ID),ID)id=ID.attr(value)//獲得屬性value值,這個就是captcha-id#print(type(id),id)imgurl=doc(#captcha_image).attr(src)//id屬性通過PyQuery模塊(CSS選擇器一致)獲取src屬性,即圖片地址,通過手動輸入驗證碼就ok

login_General

在General中可以看到Request Method:POST,所以在後續爬蟲時候會通過POST發送請求(But,我用get也成功了~~~)


進入我的主頁,我又隨意下載了一點點當前頁面的信息,正在熟悉PyQuery,所以這部分單純屬於練手~~~~

#!/usr/bin/env python3# -*- coding: utf-8 -*-import requests#from bs4 import BeautifulSoupfrom pyquery import PyQuery as pqimport urllibfrom PIL import Imageheaders={User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36, Cookie:td_cookie=18446744069694360802; td_cookie=18446744073473691510; __cfduid=d3c82ddb98a603fb7fdff368278b6672a1506862174; cf_clearance=6cc99c976e6cdae345fadd5797d8dcb89ac34909-1507376519-14400; ASP.NET_SessionId=ffcz0a2kcuvanwfqhtibxdwv; AJSTAT_ok_pages=2; AJSTAT_ok_times=2 }url=https://accounts.douban.com/logindef data(img,id,num,passport): data={ source:None, redir:https://www.douban.com, form_email:num,#賬號 form_password:passport,#密碼 captcha-solution:img,#圖片驗證碼 captcha-id:id,#不知道 login:r登錄, } return datadef get_Page(url): try: response=requests.get(url,headers=headers) if response.status_code==200: return response.text except requests.ConnectionError as e: return Nonedef parse_getID(html): doc=pq(html) ID=doc(.captcha_block input:last-child) #print(type(ID),ID) id=ID.attr(value) #print(type(id),id) imgurl=doc(#captcha_image).attr(src) #print(imgurl) return (id,imgurl)def getimg(imgurl): print(imgurl) r = session.get(imgurl, headers=headers) with open(img.jpg, wb) as f: f.write(r.content) im = Image.open(img.jpg) im.show() im.close() img = input(請輸入驗證碼) return imgdef login(data): response=requests.post(url,headers=headers,data=data) if response.status_code==200: print(成功) return response.text else: print(r失敗)def parse_content(html): doc=pq(html) items=doc(blockquote).items() for item in items: #print(type(item)) content=item.text() #print(content) with open(douban.txt,a+, encoding=utf-8)as f: f.write(content+
) f.write(-------------------+
) #print(type(contents),contents)def main(): html = get_Page(url) (id, imgurl) = parse_getID(html) img = getimg(imgurl) num= input(請輸入賬號) passport=input(請輸入密碼) html_myself=login(data(img , id ,num , passport)) parse_content(html_myself)if __name__==__main__: session = requests.session() main()

就將看看唄

以上!!!


最後:有大佬如果看到可以講講登錄後爬蟲還會被屏蔽嗎?

1.如果採用Selenium 驅動瀏覽器會被屏蔽嗎?

2.自認為登錄後,必須保持cookies一直存在,不然每次都是單純的獲得url並進行頁面的爬蟲。

3.請指導一把唄

漂亮小姐姐結尾!!!


推薦閱讀:

TAG:Python入門 | 豆瓣 | 網頁爬蟲 |