Python批量爬取fofa查詢的目標ip位址

2021-10-21 20:18:03 字數 3892 閱讀 3084

需求:想通過指令碼實現批量爬取fofa查詢後的目標ip位址,然後儲存在本地。由於前端頁面會公升級導致指令碼會過期,所以又將指令碼更新了下。若使用報錯可以扣我進行修改指令碼

先獲取登入後的cookie,比如

fofa_ip.py執行結果如下,如搜尋語句中存在引號之類的需要輸入轉義符,如 --word "title=\"+ id_vc_welcome +\"",或者 --word " title=\'***xx\' "

指令碼更新~

import requests

from requests.packages import urllib3

urllib3.disable_warnings()

import base64

import argparse

from lxml import etree

import os

from colorama import init

init(autoreset=true)

#定義傳參函式

def para():

parser = argparse.argumentparser(description='fofa查詢指令碼')

parser.add_argument('--word',type=str,required=true,help='fofa查詢的語句')

parser.add_argument('--cookie',type=str,required=true,help='登入fofa賬號後的cookie')

parser.add_argument('--pro',type=str,required=false,help='**伺服器ip和埠(可選引數),如:xx.xx.xx.xx:7890')

print('[+]author:小緣喵')

print('[-]version_1.3')

print("[-]fofa查詢,批量獲取目標ip")

args = parser.parse_args()

word = args.word

cookie = args.cookie

pro = args.pro

if not pro: #如果沒有輸入**,則**為空

pro = ''

print(f"fofa搜尋語句為:\033[0;31m\033[0m 請核對是否正確")

return word,cookie,pro

#獲取爬取的頁面數量

def pag_num(word,cookie,pro):

print("[-]開始獲取查詢的頁面數量...")

#查詢詞進行baase64編碼

s = (base64.b64encode(word.encode('utf-8'))).decode('utf-8')

#封裝請求頭和請求引數

global headers

headers =

param =

#查詢的url

url = f""

#獲取頁面原始碼

text = requests.get(url=url,headers=headers,verify=false,timeout=15,proxies=).text

#獲取爬取目標的頁面數量

tree = etree.html(text)

try:

#pag_num:獲取到的頁面總數量

pag_num = tree.xpath('//div[@id="__layout"]//div[@class="pagfooter"]/div[@class="el-pagination"]/ul[@class="el-pager"]/li/text()')[-1]

except exception as error:

print('pag_num函式中未獲取到頁面數量,可能查詢目標無結果或者頁面解析出問題。出錯所在地位pag_num變數。詳細錯誤為:')

os._exit(0)

print('fofa爬取頁面數量為:'+pag_num)

#num:想要爬取的頁面數量

num = input('請輸入您想要爬取的頁面數量:')

if num.isdigit(): #檢測輸入的是否為純數字

num = int(num)

else:

print('請輸入乙個整數,謝謝')

os._exit(0)

return pag_num,num,s

#定義爬取頁面ip的函式

def fofa(word,pag_num,num,s,pro):

file_name = word.replace('\"','').replace('\'','')+'.txt'

try:

if os.path.exists(file_name):

os.remove(file_name)

except exception as error:

print('刪除舊檔案失敗,請檢測是否有足夠許可權。詳細錯誤為:')

ip_list = #定義存放所有ip的列表

for i in range(1,num+1):

param =

#獲取頁面原始碼

url = f""

try:

text = requests.get(url=url,headers=headers,verify=false,timeout=15,proxies=).text

except exception as error:

print(f"fofa函式中,獲取頁面原始碼時發生錯誤,錯誤所在地為text變數。詳細錯誤為:")

os._exit(0)

tree = etree.html(text)

#提取乙個頁面所有ip位址

try:

r = tree.xpath('//div[@id="__layout"]//div[@class="showlistscontainer"]/div[@class="rightlistsmain"]//a[@target="_blank"]/@href')

except exception as error:

os._exit(0)

for n in r:

n = str(n)

if "//" in n:

#將ip位址儲存到列表中

else:

pass

print(f'[-]第頁爬取完畢!')

ip_list_new = list(set(ip_list)) #將ip位址去重,然後進行儲存

for i in ip_list_new:

with open(file_name,'a',encoding='utf-8') as f:

f.write(i+'\r')

print('[-]全部頁面爬取完畢')

print(f'[+]共爬取\033[0;32m\033[0m個ip位址')

if __name__ == '__main__':

para = para() #以元組的形式返回結果 ('dva', 'sessionabc', '192.168.1.1')

num = pag_num(para[0].strip('\''),para[1],para[2]) #由於輸入查詢目標引數的時候會涉及到引號之類的,而fofa語法對引號的使用有嚴格的要求,所以這裡傳入引數進去的時候要去掉單引號

fofa(para[0].strip('\''),num[0],num[1],num[2],para[2])

python動態爬取知乎 python爬取微博動態

在初學爬蟲的過程中,我們會發現很多 都使用ajax技術動態載入資料,和常規的 不一樣,資料是動態載入的,如果我們使用常規的方法爬取網頁,得到的只是一堆html 沒有任何的資料。比如微博就是如此,我們可以通過下滑來獲取更多的動態。對於這樣的網頁該如何抓取呢?我們以微博使用者動態為例,抓取某名使用者的文...

Python批量爬取資料與去重方法

在進行英文取名專案對資料的爬取與分析中,經常會對已經儲存的批量資料去獲取更多有效的資料,這個時候我們需要考慮去重複問題,以及在高頻率訪問 導致連線超時中斷等問題。設定緩衝區 當我們進行批量處理時,也許會發現在過萬條資料裡面存在些許重複項資料,這個時候如果我們針對這些資料繼續去獲取更多的資料時,依然會...

Python爬取小說

感覺這個夠蛋疼的,因為你如果正常寫的話,前幾次執行沒問題,之後你連 都沒改,再執行就出錯了。其實這可能是網路請求失敗,或者有反爬蟲的東西吧。但這就會讓你寫的時候非常苦惱,所以這這東西,健壯性及其重要!import requests from bs4 import beautifulsoup impo...