Scrapy 進行簡單的自動登錄
阿新 • • 發佈:2018-03-17
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 進行簡單的自動登錄