作者:冰藍的天空
原文:http://www.cnblogs.com/binglansky/p/8483096.html
環境: python 2.7 + win10
工具:fiddler postman 安卓模擬器
首先,打開fiddler,fiddler作為http/https 抓包神器,這里就不多介紹。 配置允許https
配置允許遠程連接 也就是打開http代理
電腦ip: 192.168.1.110 然后 確保手機和電腦是在一個局域網下,可以通信。由于我這邊沒有安卓手機,就用了安卓模擬器代替,效果一樣的。打開手機瀏覽器,輸入192.168.1.110:8888,也就是設置的代理地址,安裝證書之后才能抓包
安裝證書之后,在WiFi設置 修改網絡 手動指定http代理
保存后就可以了,fiddler就可以抓到app的數據了,打開快手 刷新,可以看到有很多http請求進來,一般接口地址之類的很明顯的,可以看到是json類型的
http post請求,返回數據是json ,展開后發現一共是20條視頻信息,先確保是否正確,找一個視頻鏈接看下。
ok 是可以播放的 很干凈也沒有水印。那就打開postman 來測試,form-data 方式提交則報錯
那換raw 這種
報錯信息不一樣了,試試加上headers
nice 成功返回數據,我又多試幾次,發現每次返回結果不一樣,都是20個視頻,剛才其中post參數中有個page=1 這樣一直都是第一頁就像一直在手機上不往下翻了就開始一直刷新那樣,反正也無所謂,只要返回數據 不重復就好。
下面就開始上代碼
# -*-coding:utf-8-*-
# author : Corleone
import urllib2,urllib
import json,os,re,socket,time,sys
import Queue
import threading
import logging
# 日志模塊
logger=logging.getLogger("AppName")
formatter=logging.Formatter('%(asctime)s %(levelname)-5s: %(message)s')
console_handler=logging.StreamHandler(sys.stdout)
console_handler.formatter=formatter
logger.addHandler(console_handler)
logger.setLevel(logging.INFO)
video_q=Queue.Queue # 視頻隊列
def get_video:
url="http://101.251.217.210/rest/n/feed/hot?app=0&lon=121.372027&c=BOYA_BAIDU_PINZHUAN&sys=ANDROID_4.1.2&mod=HUAWEI(HUAWEI%20C8813Q)&did=ANDROID_e0e0ef947bbbc243&ver=5.4&net=WIFI&country_code=cn&iuid=&appver=5.4.7.5559&max_memory=128&oc=BOYA_BAIDU_PINZHUAN&ftt=&ud=0&language=zh-cn&lat=31.319303 "
data={
'type': 7,
'page': 2,
'coldStart': 'false',
'count': 20,
'pv': 'false',
'id': 5,
'refreshTimes': 4,
'pcursor': 1,
'os': 'android',
'client_key': '3c2cd3f3',
'sig': '22769f2f5c0045381203fc57d1b5ad9b'
}
req=urllib2.Request(url)
req.add_header("User-Agent", "kwai-android")
req.add_header("Content-Type", "application/x-www-form-urlencoded")
params=urllib.urlencode(data)
try:
html=urllib2.urlopen(req, params).read
except urllib2.URLError:
logger.warning(u"網絡不穩定 正在重試訪問")
html=urllib2.urlopen(req, params).read
result=json.loads(html)
reg=re.compile(u"[u4e00-u9fa5]+") # 只匹配中文
for x in result['feeds']:
try:
title=x['caption'].replace("n","")
name=" ".join(reg.findall(title))
video_q.put([name, x['photo_id'], x['main_mv_urls'][0]['url']])
except KeyError:
pass
def download(video_q):
path=u"D:快手"
while True:
data=video_q.get
name=data[0].replace("n","")
id=data[1]
url=data[2]
file=os.path.join(path, name + ".mp4")
logger.info(u"正在下載:%s" %name)
try:
urllib.urlretrieve(url,file)
except IOError:
file=os.path.join(path, u"神經病呀"+ '%s.mp4') %id
try:
urllib.urlretrieve(url, file)
except (socket.error,urllib.ContentTooShortError):
logger.warning(u"請求被斷開,休眠2秒")
time.sleep(2)
urllib.urlretrieve(url, file)
logger.info(u"下載完成:%s" % name)
video_q.task_done
def main:
# 使用幫助
try:
threads=int(sys.argv[1])
except (IndexError, ValueError):
print u"n用法: " + sys.argv[0] + u" [線程數:10] n"
print u"例如:" + sys.argv[0] + " 10" + u" 爬取視頻 開啟10個線程 每天爬取一次 一次2000個視頻左右(空格隔開)"
return False
# 判斷目錄
if os.path.exists(u'D:快手')==False:
os.makedirs(u'D:快手')
# 解析網頁
logger.info(u"正在爬取網頁")
for x in range(1,100):
logger.info(u"第 %s 次請求" % x)
get_video
num=video_q.qsize
logger.info(u"共 %s 視頻" %num)
# 多線程下載
for y in range(threads):
t=threading.Thread(target=download,args=(video_q,))
t.setDaemon(True)
t.start
video_q.join
logger.info(u"-----------全部已經爬取完成---------------")
main
下面測試
多線程下載 每次下載2000 個視頻左右 默認下載到D:快手
總結:其實我這次爬的快手有點投機取巧了,因為post過去的參數 sign 是簽名 的確是有加密的,只所以還能返回數據。
那是因為我每次都是請求的一樣的鏈接 page=1 都是第一頁的 當我改成2的時候,就驗簽失敗了。然而,它剛好這樣也能返回不同的數據,雖然達到了效果,但卻沒有能破解他的加密算法。。。
最后放上我的github地址 : https://github.com/binglansky/spider
題圖:pexels,CC0 授權。
Windows 10是微軟有史以來功能最強大的操作系統,但它也是最復雜的。盡管用戶界面非常直觀,但是您必須更深入地研究才能自定義您的體驗,獲得最佳性能并充分利用Cortana語音助手,Edge瀏覽器和多個桌面等功能。如果您仍在使用Windows 7并擔心它即將死機,那么我們將整理此有用的指南,以簡化向Windows 10的過渡。
在下面,您將找到100多種Windows 10技巧和教程,分為九類,旨在幫助您學習基礎知識,禁用常見的煩惱,節省存儲空間或提高工作效率。
Windows 10基礎
了解如何安裝Windows 10,調整最重要的設置,添加用戶以及執行重要的日常任務。
自定義Windows 10
調整Windows UI,使其外觀和感覺都與您喜歡的方式相同。更改主題,調整圖標大小或將新的OS變成Windows 7的機制。
我們喜歡Windows 10,但像近親一樣,有時它會超越界限并引起您的注意。了解如何防止未經您的許可而阻止操作系統重新啟動,進行更新,加快緩慢打開的“下載”文件夾或禁用個性化廣告。另外,找出如何解決嚴重問題的方法,方法是引導至BIOS,以兼容模式運行舊程序, 甚至旋轉屏幕。
Windows 10的內置數字助理可以幫助您收集重要信息,管理日程安排,發送消息等等。了解如何使用語音命令喚醒Cortana,使用她發送電子郵件,撥打電話,更改口音等等。
默認的Microsoft瀏覽器快速而簡單。這是在Edge中執行各種任務的方法,從阻止彈出窗口,管理收藏夾和清除Cookie的常見操作到調整關鍵設置(如默認搜索引擎或崩潰恢復選項)。
共享網頁禁用Flash更改下載文件夾發送Web注釋禁用或啟用Cookie崩潰更改后將搜索引擎鎖定到Google將網站固定到Windows 10的“開始”菜單啟用不跟蹤設置的主頁(或主頁)啟用深色主題啟用不在Microsoft Edge瀏覽器中進行跟蹤從另一個瀏覽器將收藏夾導入Edge中管理和查看密碼從另一個瀏覽器將收藏夾導入Edge 清除Microsoft Edge中的歷史記錄和Cookies在Microsoft Edge中 打印在Microsoft Edge瀏覽器中將頁面添加到閱讀列表中 重命名 Microsoft Edge瀏覽器中的收藏夾在Microsoft Edge中添加收藏的站點/書簽 打開一個私人窗口在Microsoft Edge中 啟用 Microsoft Edge中的閱讀模式在Microsoft Edge 瀏覽器中啟用并在Microsoft Edge中使用Cortana 阻止彈出窗口在Edge瀏覽器中 預留選項卡 增加Edge的隱私
使Windows 10和您自己更快,更強大。配置操作系統以使其啟動更快,將屏幕鏡像到外部監視器,錄制Xbox游戲或激活平臺的內置“ 上帝模式”。
將您的PC連接到網絡或將其用作熱點,同時確保系統安全。了解如何創建權限受限的來賓帳戶,受密碼保護的文件夾等。
通過使Windows 盡可能小,在SD卡上安裝應用程序并刪除不必要的Windows.old文件夾,在硬盤或SSD上找到更多空間。通過控制要同步的文件夾,將帳戶映射為網絡驅動器等來充分利用Microsoft的OneDrive云備份服務。
每次瀏覽硬盤驅動器,從USB閃存驅動器復制文件或整理照片文件夾時,您都在使用文件資源管理器。通過利用其所有功能并自定義UI,充分利用此重要工具。
了解如何充分利用Microsoft的內置繪圖程序。