1. 程式人生 > >python爬蟲第五天

python爬蟲第五天

nbsp onos cti 而在 鏈接 pan border cin exc

cookie 我們訪問網頁是通過http協議進行的,而http協議是一個無狀態協議(無法維持會話之間的狀態),比如我們登錄一個網站成功後訪問另一個網頁,那麽登錄狀態就會消失,十分不方便。而我們可以通過Cookie保存會話信息,將會話信息保存在客戶端,或者用session保存會話信息在服務器端。但是服務器端會給客戶端發送sessionID等信息,這些信息一般保存在Cookie中,大部分時候我們都要用到Cookie,而爬蟲中我們可以通過Cookie保持登錄狀態進行內容爬取。 Cookiejar實戰精析 註意:python3中使用Cookiejar庫進行處理,而在python2中可以使用Cookielib庫進行處理。
現在我們登錄ChinaUnix論壇,http://bbs.chinaunix.net http://account.chinaunix.net/login/?url=http%3A%2F%2Fbbs.chinaunix.net%2F 我們先註冊一下,然後我們可以通過Fiddler工具進行分析,不過我們現在先使用F12調出調試界面,登錄輸入用戶名密碼,點擊登錄,觀察調試界面。在NetWork下找到登錄Request URL字段得到POST表單網址http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes。(書中這樣寫的,但是現在網頁自動跳轉了,我沒找到。。直接用了書上的可以用。) import urllib.request import urllib.parse import http.cookiejar #這裏填寫登錄成功的url,這裏的loginhash是書上的。這裏用肯定不行,這裏得在登錄頁面拿到才行 url="http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes&loginhash=L68q" postdata=urllib.parse.urlencode({ #這裏填寫用戶名密碼,自己填自己的吧 "username":"yang", "password":"1234567890" }).encode(‘utf-8‘) req=urllib.request.Request(url,postdata) req.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘) #創建CookieJar對象 cjar=http.cookiejar.CookieJar() #使用HTTPCookieProcessor創建cookie處理器,並以其為參數opener為參數 opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar)) #將opener安裝為全局 urllib.request.install_opener(opener) file=opener.open(req) data=file.read() file=open("D:/crawler/9.html","wb") file.write(data) file.close() url2="http://bbs.chinaunix.net" data2=urllib.request.urlopen(url2).read() fhandle=open("D:/crawler/10.html","wb") fhandle.write(data2) fhandle.close() 這個代碼我還沒有弄成功,先放在這裏吧。 接下來開始手寫爬蟲實戰 圖片爬蟲實戰
首先我們先實現一個簡單的爬蟲,我們打開京東首頁www.jd.com 進入手機分類商品http://list.jd.com/list.html?cat=9987,653,655,我們點擊下一頁發現網址變了, http://list.jd.com/list.html?cat=9987,653,655&page=2&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=6#J_main 可以發現這裏是使用get方法請求的,如何自動爬取其他頁的情況呢?我們可以使用for循環每次循環後把page字段加1,即自動切換到下一頁,之後我們要獲取對應的圖片,使用正則表達式匹配源碼中的圖片的鏈接部分,然後通過urllib.request.urlretrieve()方法將對應的鏈接保存在本地。 我們要先過濾點信息走,我們右擊查看源代碼:我們要找到一個唯一的標識,並且包含要爬取得內容,以及盡量少的無關信息。這裏我們找到<div id = "plist"> 這是開頭的部分,結尾的標識<div class="page clearfix"滿足要求 這樣過濾就是:用正則表達式只取這兩個標識中間的內容:patl=‘<div id="plist".+?<div class="page clearfix">‘ import re import urllib.request import urllib.error def craw(url,page): html1=urllib.request.urlopen(url).read() html1=str(html1) pat1=‘<div id="plist".+?<div class="page clearfix">‘ result1=re.compile(pat1).findall(html1) result1=result1[0] pat2=‘<img width="220" height="220" data-img="1" src="//(.+?\.jpg)">‘ imagelist=re.compile(pat2).findall(result1) x=1 for imageurl in imagelist: imagename="D://crawler/image/image"+str(page)+str(x)+".jpg" imageurl="http://"+imageurl try: urllib.request.urlretrieve(imageurl,filename=imagename) except urllib.error.URLError as e: if hasattr(e,"code"): x+=1 if hasattr(e,"reason"): x+=1 x+=1 for i in range(1,15): url="http://list.jd.com/list.html?cat=9987,653,655&page="+str(i) craw(url,i) 這樣就爬取成功了,我親測可以。 今天實在是懶就寫這麽多了 此文是我在學習《精通Python網絡爬蟲》(韋瑋著)的總結,純手打。

python爬蟲第五天