如何使用Photon高效率提取網(wǎng)站數(shù)據(jù)
Photon是一種高效率的的網(wǎng)絡(luò)爬蟲,可從目標中提取URL,文件以及各類情報。其通過多線程大大加快數(shù)據(jù)提取進程。
項目地址:
https://github.com/s0md3v/Photon
主要特點
Photon提供的各種選項可以讓用戶按照自己的方式抓取網(wǎng)頁,不過,Photon最棒的功能并不是這個。
數(shù)據(jù)提取
默認情況下,Photon在抓取時會提取以下數(shù)據(jù):
網(wǎng)址(范圍內(nèi)和范圍外的)
帶參數(shù)的網(wǎng)址(example.com/gallery.php?id=2)
情報(電子郵件,社交媒體帳戶,亞馬遜水桶等)
文件(pdf,png,xml等)
JavaScript等文件
基于自定義正則表達式模式的字符串
提取的信息按下圖方式保存。
智能多線程
大多數(shù)浮于互聯(lián)網(wǎng)表面的工具都沒有正確使用多線程,它們要么為線程提供一個項目列表,這會導(dǎo)致多個線程訪問同一個項目,或者只是放置一個線程鎖定并最終使多線程無效。
Ninja模式
在Ninja模式中,3個在線服務(wù)器用于代表你向目標發(fā)出請求。
所以基本上,現(xiàn)在你有4個客戶端同時向同一個服務(wù)器發(fā)出請求,如果連接速度慢,那么可以提高速度,***限度地降低連接重置的風險以及來自單個客戶端的延遲請求。
這是Quark生成的比較圖,其中的線代表線程:
兼容性&依賴
兼容性
Photon目前全面兼容python2.x – 3.x,但因為這個項目正處于積極開發(fā)階段,可能會需要python2.x不具備的功能。故開發(fā)者最終可能會放棄對python2.x的支持。
操作系統(tǒng)
Photon已經(jīng)在Linux(Arch,Debian,Ubuntu),Termux,Windows(7&10)和Mac上進行了測試,并在所有系統(tǒng)上如期運行,如果你發(fā)現(xiàn)了任何bug,請在github上提交。
顏色
Mac和Windows不支持ANSI轉(zhuǎn)義序列,因此所輸出內(nèi)容不會在Mac和Windows上顯示顏色。
依賴
requests urllib3 argparse
Photon所使用的其余python庫是預(yù)裝的python解釋器的標準庫。
如何使用Photon
語法: photon.py [選項] -u --url 目標url -l --level 抓取等級 -t --threads 線程數(shù) -d --delay 請求間的延遲 -c --cookie cookie -r --regex 正則表達式模式 -s --seeds 其他的子url -e --export 導(dǎo)出格式化結(jié)果 -o --output 指定輸出目錄 --exclude 通過正則表達式排除特定url --timeout http 請求超時 --ninja ninja 模式 --update 更新 --dns 轉(zhuǎn)儲dns數(shù)據(jù) --only-urls 僅提取url --user-agent 指定 user-agent(s)
僅抓取單個網(wǎng)站
選項 -u 或 –url,使用示例:
- python photon.py -u "http://example.com"
抓取深度
選項 -l 或 –level,默認深度為2,使用示例:
- python photon.py -u "http://example.com" -l 3
通過該選項,用戶可以設(shè)置抓取的遞歸限制,例如,深度為2意思是Photon會從主頁和子頁。
線程數(shù)
選項 -t 或 –threads,默認線程數(shù)為2,使用示例:
- python photon.py -u "http://example.com" -t 10
該選項可以對目標進行并發(fā)請求,-t選項可用于指定要進行的并發(fā)請求數(shù)量。值得注意的是,雖然多線程可以加速抓取,但是也可能會觸發(fā)安全機制,此外,線程數(shù)過多,也有可能使小型網(wǎng)站宕機。
每個HTTP請求間的延遲
選項 -d 或 –delay,默認為0,使用示例:
- python photon.py -u "http://example.com" -d 2
該選項可以指定每個HTTP(S)請求之間間隔的秒數(shù)。有效值是int,例如1表示1秒。
超時
選項 –timeout,默認為5,使用示例:
- python photon.py -u "http://example.com --timeout=4
該選項指定HTTP(S)請求等待多長時間即為超時。
Cookies
選項 -c 或 –cookies,默認為 no cookie header is sent,使用示例:
- python photon.py -u "http://example.com" -c "PHPSESSID=u5423d78fqbaju9a0qke25ca87"
該選項允許你在非ninja模式下為發(fā)出的每個HTTP請求添加Cookie header,主要用于目標網(wǎng)站需要基于Cookie驗證的情形。
指定輸出目錄
選項 -o 或 –output,默認為 目標域名,使用示例:
- python photon.py -u "http://example.com" -o "我的目錄"
Photon將結(jié)果保存在以目標域名命名的目錄中,但你可以使用此選項自定義目錄。
排除特定url
選項 –exclude,使用示例:
- python photon.py -u "http://example.com" --exclude="/blog/20[17|18]"
匹配指定正則表達式的網(wǎng)址將不會被抓取及顯示在結(jié)果中。
指定子url
選項 -s 或 –seeds,使用示例:
- python photon.py -u "http://example.com" --seeds "http://example.com/blog/2018,http://example.com/portals.html"
你可以使用此選項添加自定義子URL,要以逗號分隔。
指定user-agent(s)
選項 –user-agent,使用示例:
- python photon.py -u "http://example.com" --user-agent "curl/7.35.0,Wget/1.15 (linux-gnu)"
你可以使用此選項使用自己的用戶代理,以逗號分隔。此選項僅用于幫助用戶在不修改默認user-agents.txt文件的情況下使用特定用戶代理。
自定義正則表達式模式
選項 -r 或 –regex,使用示例:
- python photon.py -u "http://example.com" --regex "\d{10}"
通過使用此選項指定正則表達式模式,可以在抓取期間提取字符串。
導(dǎo)出格式化結(jié)果
選項 -e 或 –export
通過 -e 選項,你可以指定要保存文件的輸出格式,使用示例:
- python photon.py -u "http://example.com" --export=json
目前支持的格式:json
跳過數(shù)據(jù)提取
選項: –only-urls,使用示例:
- python photon.py -u "http://example.com" --only-urls
該選項會跳過提取js文件等數(shù)據(jù),當你只需要抓取目標時,該選項可以派上用場。
更新
選項 –update,使用示例:
- python photon.py --update
如果使用此選項,Photon會檢查更新。如果有新的版本,Photon會下載并將更新文件合并到當前目錄中,Photon不會覆蓋其他文件。
Ninja模式
選項 –ninja
此選項啟用Ninja模式。在該模式下,Photon會使用以下網(wǎng)站代表你發(fā)出請求。
- codebeautify.org
- photopea.com
- pixlr.com
轉(zhuǎn)儲DNS數(shù)據(jù)
選項 –dns,使用示例:
- python photon.py -u http://example.com --dns
創(chuàng)建顯示目標域名的DNS數(shù)據(jù)的圖像。目前不支持目標是子域。