scrapy實戰|模擬登錄人人網實戰

  • 2019 年 10 月 4 日
  • 筆記

1

寫在前面的話

前面我們學習了scrapy並且實戰了爬取噹噹網的數據,相信大家對scrapy的基本操作還是掌握的OK的了,如果沒看前面文章的朋友可以去看一看。今天我們繼續深入一下scrapy框架,用scrapy框架來登錄人人網。

2

寫爬蟲之前必要的分析!

上圖就是我們的人人網了,通常我們想要去登錄一個網站,有兩種思路:①通過抓包工具來抓取post數據,看看裡面有沒有表單,然後提交表單來進行登錄 ②通過觀察分析網頁html源碼來找到form表單標籤並且找到相關的提交參數。

經過我的分析,我用F12看了一下抓包數據,是沒有發現post數據的(大家可以自己去看一下),竟然這個行不通,我們就直接查看源程式碼!

從我打箭頭的地方可以看到,我們需要傳送賬戶和密碼資訊的網址是http://www.renren.com/PLogin.do ,然後我們需要傳送兩個參數email和password。

當我們提交這兩個參數過去時,如果登錄成功會返回一個登錄成功介面的源程式碼,我們就通過這個源程式碼來判斷是否登錄成功!

3

分析完啦,開始寫程式碼!

前面的創建爬蟲項目和文件等操作我就不多提了,不會的朋友可以去看我前面寫的文章。

我先直接甩程式碼給大家了,老規矩,解釋寫在程式碼注釋里了!

loginrr.py:

# -*- coding: utf-8 -*-  import scrapy  from scrapy.http import Request,FormRequest    class LoginrrSpider(scrapy.Spider):      name = 'loginrr'      allowed_domains = ['renren.com']      start_urls = ['http://renren.com/']      headers = {          'User-Agent':              'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'      }        # 這裡我們先編寫start_requests方法(會首先執行)      def start_requests(self):          # 首先訪問一遍登錄頁面(在這裡我們可以監測有無驗證碼,若有則需要添加驗證碼欄位,若無則不需要)          # 然後回調parse方法          # 設置meta參數,將cookiejar設置為1,表示cookjar開啟          return [Request("http://www.renren.com/PLogin.do", meta={"cookiejar": 1}, callback=self.parse)]        def parse(self, response):          # 需要發送的表單,這次沒有驗證碼          data = {              # 這裡輸入你們自己的帳號密碼              'email': 'xxxxxx',              'password': 'xxxxxxxx'          }          print("正在登陸...")          # 通過 FormRequest.from_response方法來進行登錄          return [FormRequest.from_response(response,                                            # 設置cookie資訊                                            meta={"cookiejar": response.meta["cookiejar"]},                                            headers=self.headers,                                            formdata=data,                                            # 回調到next方法                                            callback=self.next,                                            )]        def next(self, response):          # 列印登錄成功後的介面源程式碼          print(response.body)

大家需要注意,在運行之間需要設置setting.py文件,將ROBOTSTXT_OBEY 設置為 False(具體原因,在前面的文章中了)

運行結果:

其實用scrapy框架寫登錄網站的程式碼還是比較容易的,但是如果有驗證碼了,怎麼辦呢?我下一篇爬蟲系列文章就會給大家說說如何去破解登錄介面的驗證碼問題!

4

結尾

相信今天的文章十分的輕鬆簡單,但是大家還是得動手寫一寫,下一篇爬蟲文章咱們來玩玩帶驗證碼的網站,希望大家持續關注!

Tags: