豆瓣爬蟲:模擬登入(可直接在cmd執行)
阿新 • • 發佈:2018-12-18
按[F12]開啟網頁原始碼 - 按[F8]尋找redir - 可將redir的value值設為你想跳轉的頁面。
手動登入後,跳轉到賬戶介面,如下:
按[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('----------------------------------------登陸失敗----------------------------------------')