標籤:python 爬蟲 requests beautifulsoup 類比登入
哈哈哈,類比登入成功啦啦啦啦啦~~~~~
重要的事本來要說三遍,不過還是算了==
先上:
眾所周知,很多網站都設定了登入之後才能擷取查看頁面的權利,因此類比登入成了爬取資訊的第一步,這一步成功了,嘿嘿,just do it!
好,廢話不多說,直接說重點:
首先,你應該要瞭解網站登入的流程以及你需要post的資訊,以豆瓣為例:
source:movieredir:https://movie.douban.com/mine?status=collectform_email:usernameform_password:passwordcaptcha-solution:dresscaptcha-id:6rP40CbJzNgdJuqOgM3Y6wNs:enlogin:登入
這就是你需要提交的資訊了,包括使用者名稱和密碼,以及驗證碼和驗證碼的ID,看到這可能有人會想我怎麼知道驗證碼的ID,各位放心,在頁面載入時就已經到用戶端這邊來了,也就是說你可以直接從瀏覽器中看到,是不是很炫酷!
第二步,需要瞭解一些requests這個庫了,因為requests直接省去了urllib和urllib2的很多很多很多麻煩,省去了很多冗餘的代碼,正如官網所言,Requests:HTTP for Human,這是給人用的==
官網地址:Requests
如果你之前有瞭解過RE和bs4,好了,直接coding吧!
不然的話最好去瞭解一下bs,也省了不少的麻煩,協助文檔地址:BeautifulSoup
Talking is cheap,show me the code. Now is ShowTime!
# -*- encoding:utf-8 -*-##############################__author__ = "Andrewseu"__date__ = "2015/8/3"###############################import requestsfrom bs4 import BeautifulSoupimport urllibimport reloginUrl = 'http://accounts.douban.com/login'formData={ "redir":"http://movie.douban.com/mine?status=collect", "form_email":username, "form_password":password, "login":u'登入'}headers = {"User-Agent":'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36'}r = requests.post(loginUrl,data=formData,headers=headers)page = r.text#print r.url'''擷取驗證碼圖片'''#利用bs4擷取captcha地址soup = BeautifulSoup(page,"html.parser")captchaAddr = soup.find('img',id='captcha_image')['src']#利用Regex擷取captcha的IDreCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'captchaID = re.findall(reCaptchaID,page)#print captchaID#儲存到本地urllib.urlretrieve(captchaAddr,"captcha.jpg")captcha = raw_input('please input the captcha:')formData['captcha-solution'] = captchaformData['captcha-id'] = captchaIDr = requests.post(loginUrl,data=formData,headers=headers)page = r.textif r.url=='http://movie.douban.com/mine?status=collect': print 'Login successfully!!!' print '我看過的電影','-'*60 #擷取看過的電影 soup = BeautifulSoup(page,"html.parser") result = soup.findAll('li',attrs={"class":"title"}) #print result for item in result: print item.find('a').get_text()else: print "failed!"
有任何不懂的地方,歡迎和我交流!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Python爬蟲之類比登入豆瓣擷取最近看過的電影