1. 程式人生 > >Scrapy 進行簡單的自動登錄

Scrapy 進行簡單的自動登錄

scrapy post login ourstep

前面豆子學習了用Scrapy進行基本的get請求,現在來看看如何進行簡單的post操作。以一個論壇為例,現在看看如何進行一個簡單的登錄請求。

豆子在澳洲經常上的一個論壇是新足跡論壇,網站是www.oursteps.com.au

簡單的自動登錄和跳轉

1. 創建新的項目和爬蟲文件

技術分享圖片

技術分享圖片

一個基本的模板就生成了
技術分享圖片

2. 抓包獲取登錄的URL和請求字段

打開firefox,代理指向fiddler,然後點開fiddler,開始登錄。fidder作為代理服務器,會把所有的請求內容都抓出來。

註意觀察fidder的界面,向右的箭頭代表是一個post請求
技術分享圖片

查看具體的textview可以看見他提交的內容
技術分享圖片

登錄以後的論壇界面是這樣

技術分享圖片

3. 編輯我們的爬蟲文件

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

class LoginSpider(scrapy.Spider):
    name = ‘login‘
    allowed_domains = [‘oursteps.com.au‘]
        #這個默認的起點網址可以不用,因為我們下面配置了start-requests的方法,他們的功能類似,都是去爬第一個起始的網址
    #start_urls = [‘http://oursteps.com.au/‘]
        #這個header可以是任何瀏覽器的頭文件,用於偽裝
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
    }

    #裏面的查詢地址最好是使用在fidder裏面看見的地址,cookiejar設為真,parse是用一個回調函數,執行爬取信息之後對應的操作
    def start_requests(self):
        return [Request("http://www.oursteps.com.au/", meta={"cookiejar": 1}, callback=self.parse)]

    #發送一個post請求,數據是字典格式的,發送完了之後執行另外一個回調函數
    def parse(self, response):
        data = {
            "username": "beanxyz",
            "password": "Snake2013",
        }

        print("login…")
        # 通過FormRequest.from_response()進行登陸
        return [FormRequest.from_response(response,
                                          # 設置cookie信息
                                          meta={"cookiejar": response.meta["cookiejar"]},
                                          # 設置headers信息模擬成瀏覽器
                                          headers=self.header,
                                          # 設置post表單中的數據
                                          formdata=data,
                                          # 設置回調函數,此時回調函數為next()
                                          callback=self.next,
                                          )]

#回調函數,直接把返回的頁面保存下來
    def next(self,response):
        data=response.body
        #註意是二進制格式
        fh=open("C:/temp/ourstep/a.html","wb")
        fh.write(data)
        fh.close()
#登錄成功了之後,再跳轉到另外一個頁面去,記住帶著cookie的狀態
        yield Request("http://www.oursteps.com.au/bbs/home.php?mod=space&uid=19783",callback=self.next2,meta={"cookiejar": True})

#保存新頁面的內容
    def next2(self,response):
        data=response.body
        fh = open("C:/temp/ourstep/b.html", "wb")
        fh.write(data)
        fh.close()

4.執行爬蟲

技術分享圖片

5.確認結果

登錄成功後的界面
技術分享圖片

跳轉到個人檔案的界面
技術分享圖片

Scrapy 進行簡單的自動登錄