Scrapy爬蟲模擬登陸豆瓣

首先還是創(chuàng)建爬蟲,其命令如下:

#01.創(chuàng)建 Scrapy 項目
scrapy startproject simulate_login
#02. 進(jìn)入 simulate_login目錄下,創(chuàng)建爬蟲
scrapy genspider your_spider douban.com

模擬登陸豆瓣的關(guān)鍵點(diǎn)
1、分析真實(shí)post地址,尋找formdata;
2、模擬post,構(gòu)造類似的formdata;
3、處理驗(yàn)證碼。
豆瓣登陸地址為https://accounts.douban.com/login,進(jìn)入登陸界面,我們首先輸入賬號和密碼,密碼故意輸錯,然后輸入正確的驗(yàn)證碼。按F12分析真實(shí)的post地址---,尋找他的formdata,如下圖:

捕獲.PNG

實(shí)戰(zhàn)操作:
幾個注意事項:
1、注意Python2和Python3的部分語法區(qū)別;
2、注意根據(jù)自己的實(shí)際情況,填寫headers部分。

到2018年8月10日為止,該方法還可以登陸豆瓣。下面貼出主要代碼:

# -*- coding: utf-8 -*-
import scrapy
import urllib,re
from scrapy.http import Request,FormRequest

class YourSpiderSpider(scrapy.Spider):
    name = 'your_spider'
    allowed_domains = ['douban.com']
    #start_urls = ['http://douban.com/']
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"} #供登錄模擬使用
    
    def start_requests(self):
        url='https://www.douban.com/accounts/login'
        #return [Request(url=url,meta={"cookiejar":1},callback=self.parse)]#可以傳遞一個標(biāo)示符來使用多個。如meta={'cookiejar': 1}這句,后面那個1就是標(biāo)示符
        return [scrapy.FormRequest("https://accounts.douban.com/login", headers=self.headers, meta={"cookiejar":1}, callback=self.parse)]
    
    
    def get_content(self, response):
            title = response.xpath('//title/text()').extract()[0]
            if u'登錄豆瓣' in title:
                print("登錄失敗,請重試")
            else:
                print("登陸成功")

    def parse(self, response):
        
        captcha = response.xpath('//*[@id="captcha_image"]/@src').extract()
        print(captcha)
        if len(captcha)>0:
            #有驗(yàn)證碼,人工輸入驗(yàn)證碼
            urllib.request.urlretrieve(captcha[0],filename=r"C:\Users\LBX\your_project\simulate_login\simulate_login\captcha.png")
            captcha_value=input('查看captcha.png,有驗(yàn)證碼請輸入:')
            data={
                    "form_email":"18353113181@163.com",
                    "form_password":"9241113minda",
                    "captcha-solution":captcha_value,
                    }
        else:
            #此時沒有驗(yàn)證碼
            print("無驗(yàn)證碼")
            data={
                    "form_email":"18353113181@163.com",
                    "form_password":"9241113minda",
                                        }
        print("正在登陸中.....")
        #進(jìn)行登錄
        return[
                FormRequest.from_response(
                        response,
                        meta={"cookiejar":response.meta["cookiejar"]},
                        headers=self.headers,
                        formdata=data,
                        callback=self.get_content,
                        )
                ]
               
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容