python 爬蟲 如何通過scrapy簡單模擬登陸豆瓣網,手動進行圖形驗證碼的驗證
阿新 • • 發佈:2018-12-14
1.建立scrapy爬蟲程式,在terminal命令列輸入’scrapy startproject douban_login’ 2.建立爬蟲主程式,主要步驟都在這裡實現,以douban_login.py命名 程式程式碼如下:
import scrapy from scrapy.spider import CrawlSpider from urllib import request from PIL import Image#載入驗證碼圖片的模組 #登陸豆瓣主程式 class Douban_login(CrawlSpider): name = 'douban_login' allowed_domains = ['douban.com'] start_urls = ['https://accounts.douban.com/login'] log_in = 'https://accounts.douban.com/login' def parse(self, response): #建立一個可以進行填寫模擬登陸資訊的字典 formdata = { 'source':'None', 'redir':'https://accounts.douban.com/login', 'form_email':'
[email protected]', 'form_password':'xl7187596', 'remember':'on', 'login':'登入' } #獲取填寫登入資訊的物件 captcha_url = response.css('img#captcha_image::attr(src)').get() #如果存在,填入對應的登入資訊 if captcha_url: captcha =self.captcha_img(captcha_url) formdata['captcha-solution'] = captcha captcha_id = response.xpath('//input[@name="captcha-id"]/@value').get() formdata['captcha-id'] = captcha_id #提交請求 yield scrapy.FormRequest(url =self.log_in,formdata=formdata,callback=self.parse_login) #判斷是否登陸成功 def parse_login(self,response): if response.url == 'https://www.douban.com/': print("登入成功") else: print("登陸失敗") #獲取圖形驗證碼並手動填入 def captcha_img(self,imgurl): request.urlretrieve(imgurl,'captcha.png') image = Image.open('captcha.png') image.show() captcha = input("請輸入驗證碼:") return captcha
3.進入settings設定瀏覽器頭部並開啟 改寫程式碼如下:
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
}
4.建立執行函式main.py檔案 寫入程式碼如下:
from scrapy import cmdline
cmdline.execute('scrapy crawl douban_login'.split())
執行就可以模擬登陸豆瓣並進行圖形驗證碼的驗證了