豆瓣爬蟲:模擬登錄(可直接在cmd執行)

【本代碼可直接順序複製粘貼,並用cmd運行。注意:https不要寫成http】


先查看一下登錄所需的信息。登錄頁面https://accounts.douban.com/login

按[F12]打開網頁源代碼 - 按[F8]尋找redir - 可將redir的value值設爲你想跳轉的頁面。

我設爲http://movie.douban.com/mine?status=collect,跳轉到我的賬戶信息(方便檢查登錄是否成功)

手動登錄後,跳轉到賬戶界面,如下:

按[F12],打開如下界面:

(1)查看[Network] - [login] - [From Data]裏面的信息,這就是我們要從代碼中提交的信息。

(2)其中[User-Agent]信息爲headers中的信息。


代碼:

1.配置環境:coding,packages,headers(cookies不需要設置) 

# coding: utf-8
import urllib.request
import pandas as pd
from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
import urllib.parse
import requests
import re
from urllib.request import urlretrieve
#根據自己的瀏覽器設置
headers = {"User-Agent":'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36'}

 4.兩種登錄模式:需要驗證碼和不需要驗證碼

(1)不需要驗證碼,輸入用戶名和密碼後,將會自動跳轉到個人賬戶界面 

loginUrl = 'https://accounts.douban.com/login'
formData={
     "redir":"http://movie.douban.com/mine?status=collect",
     "form_email":input('請輸入用戶名/郵箱(格式爲[email protected]):'),
     "form_password":input('請輸入密碼(格式爲qazwsx123):'),
     "login":u'登錄'}

r = requests.post(loginUrl,data=formData,headers=headers)

(2)如果有驗證碼,則從頁面中解析出驗證碼的ID和image,並保存image到本地。爲了方便,image直接從代碼中顯示出來。

page = r.text
if r.url != 'https://movie.douban.com/mine?status=collect':
    soup = BeautifulSoup(page,"html.parser")
    captchaAddr = soup.find('img',id='captcha_image')['src']

    reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
    captchaID = re.findall(reCaptchaID,page)

    image_file = input('請輸入豆瓣登錄的驗證碼圖片保存地址,格式爲  F:\\\\16.Job\\\\1.Scrapy\\\\image.jpg 注意:單斜槓\轉爲雙斜槓\\\\   :')

    urlretrieve(captchaAddr,image_file)
    print('提示:保存後圖片會自動打開,記住驗證碼並關閉圖片窗口,等待至出現提示後再輸入驗證碼。')

    import cv2
    import matplotlib.pyplot as plt 
    image = cv2.imread(image_file)
    plt.imshow(image)
    plt.show()
    print(formData)
    r = requests.post(loginUrl,data=formData,headers=headers)
    print(r.text)

 5.登錄成功與否的提示

if r.url == 'https://movie.douban.com/mine?status=collect':
    print(page)
    print('----------------------------------------登錄成功----------------------------------------')
else:
    print('----------------------------------------登陸失敗----------------------------------------')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章