爬取githubs——登入後的東西(兩種方法)
注意:scrapy也是能傳送post請求的,但是不使用scrapy.Request,而是要使用scrapy.FormRequest
1.開啟githubs,輸入https://github.com/login來到登入頁面,點選檢查,
分析:network裡看到data要攜帶有的資料是commit,utf8,authenticity_token,login,password
,
2.在githubs的登入頁面,找到commit,utf8,authenticity_token,在element中的位置,並用xpath找出來
上圖所示authenticity_token的位置:
//input[@name='authenticity_token']/@value
上圖所示:utf8所在的位置:
//input[@name='utf8']/@value
同理:commit的位置:
//input[@name='commit']/@value
附上登入spider的原始碼:
# -*- coding: utf-8 -*-
import re
import scrapy
class GhSpider(scrapy.Spider):
name = 'gh'
allowed_domains = ['github.com']
start_urls = ['http://github.com/login']
def parse(self, response):
authenticity_token = response.xpath("//input[@name='authenticity_token']/@value").extract_first()
utf8 = response.xpath("//input[@name='utf8']/@value").extract_first()
commit = response.xpath("//input[@name='commit']/@value").extract_first()
post_data = dict(
commit=commit,
utf8=utf8,
authenticity_token=authenticity_token,
login="你的使用者名稱",
password="你的githubs的密碼"
)
yield scrapy.FormRequest(
"https://github.com/session",
formdata=post_data,
callback=self.after_login
)
def after_login(self,response):
print(re.findall("ycw",response.body.decode()))
with open("a.html","w",encoding="utf-8")as f:
f.write(response.body.decode())
if __name__ == '__main__':
from scrapy import cmdline
cmdline.execute("scrapy crawl gh".split())
想對登入後的頁面進行提取還是別的處理,在def after_login()後面繼續寫程式碼
即使密碼輸入錯誤,使用re也能匹配到部分使用者名稱,可以將html儲存下來,檢視結果
with open("a.html","w",encoding="utf-8")as f:
f.write(response.body.decode())
方法二:
form表單只有一個的時候,我們可以使用如下方式,自動的從response中尋找from表單
yield scrapy.FormRequest.from_response(
response, #自動的從response中尋找from表單
建立專案
D:\scrapy_1>cd login1
D:\scrapy_1\login1>scrapy genspider gt2 github.com
# -*- coding: utf-8 -*-
import re
import scrapy
class Gt2Spider(scrapy.Spider):
name = 'gt2'
allowed_domains = ['github.com']
start_urls = ['http://github.com/login']
def parse(self, response):
yield scrapy.FormRequest.from_response(
response, #自動的從response中尋找from表單
formdata={"login":"你的使用者名稱","password":"你的githubs的密碼"},
callback=self.after_login
)
def after_login(self,response):
print(re.findall("ycw",response.body.decode()))
執行:
scrapy crawl gt2
程式碼執行結果
方法三:
攜帶cookie的方式
相關文章
- Python 爬取網頁資料的兩種方法Python網頁
- 破解「登入後複製」的三種方法
- Java中取小數點後兩位(四種方法)Java
- 為爬蟲獲取登入cookies:登入的恩恩怨怨爬蟲Cookie
- Python爬蟲教程-13-爬蟲使用cookie爬取登入後的頁面(人人網)(下)Python爬蟲Cookie
- Python爬蟲教程-12-爬蟲使用cookie爬取登入後的頁面(人人網)(上)Python爬蟲Cookie
- 【shell 指令碼】兩種登入方式指令碼
- 快速爬取登入網站資料網站
- uniapp 完成兩種方式登入 驗證碼登入 密碼登入APP密碼
- html入門的一些東西HTML
- 04.Django實現完整登入系統的兩種方法(cookie and session)DjangoCookieSession
- Linux桌面:GNOME工程提供的兩樣東西(轉)Linux
- vnc批次登入,2種VNC批次登入Linux的方法VNCLinux
- 爬取網頁後的抓取資料_3種抓取網頁資料方法網頁
- 爬取資料時防止爬蟲被限制的四種方法爬蟲
- 如何用Python爬取需要登入的網站?Python網站
- 為爬蟲獲取登入cookies:charles工具的使用爬蟲Cookie
- SQLPlus的兩種登入方式的不同效果SQL
- 10,函式和方法相關的東西函式
- JS讀取本地TXT文字的兩種方法JS
- Rails不是入門的好東西(gateway drug)AIGateway
- Python爬蟲入門【4】:美空網未登入圖片爬取Python爬蟲
- 操作教程|在 MeterSphere 中透過 SSH 登入伺服器的兩種方法伺服器
- 爬蟲兩種繞過5s盾的方法爬蟲
- 獲取爬蟲動態IP的三種方法爬蟲
- Python爬蟲的兩套解析方法和四種爬蟲實現Python爬蟲
- Ubuntu設定root登入有兩種方式Ubuntu
- 為爬蟲獲取登入cookies: 使用Charles和requests模擬微博登入爬蟲Cookie
- APP爬蟲-雙向認證抓包的兩種方法APP爬蟲
- 爬蟲實戰(二):Selenium 模擬登入並爬取資訊爬蟲
- 如何解決網站登入後反爬的問題?網站
- python爬蟲實戰:爬取西刺代理的代理ip(二)Python爬蟲
- 就想寫個爬蟲,我到底要學多少東西啊?爬蟲
- 不要偷黑客的東西黑客
- 獲取沙盒檔案路徑的兩種方法
- 讀取檔案迴圈處理的兩種方法
- Python 爬蟲模擬登入方法彙總Python爬蟲
- 三種東西永遠不要放到資料庫裡資料庫