fofa爬取数据的小软件

这是一款自己开发的fofa爬取数据小软件,打包命令注释里有!
主要就是将自己的邮箱和key配置好即可!
城市这些,我只放了中国和美国的,有需要的自己再进行扩展!
打包好后,只需要将语法放进去,即可自己爬取并保存数据到桌面!

import os
import threading
from tkinter import *
from tkinter import messagebox

import requests
import base64

API_url = r"https://fofa.info/api/v1/search/all?email={}&key={}&qbase64={}&page={}&size={}"
email = '邮箱'
key = 'key'

# 打包命令:pyinstaller -Fw .\fofav_1.py   //-Fw表示隐藏 黑乎乎的cmd窗口 -F则不隐藏
# region
cn_region = ['', 'Beijing', 'Zhejiang', 'Guangdong', 'Shandong', 'Shanghai', 'Sichuan', 'Jiangsu', 'Fujian', 'Anhui',
             'Henan', 'Hubei', 'Liaoning', 'Hunan', 'Shaanxi', 'Chongqing', 'Hebei', 'Jilin', 'Guizhou', 'Yunnan',
             'Ningxia Hui Autonomous Region', 'Jiangxi', 'Heilongjiang', 'Tianjin', 'Guangxi', 'Qinghai',
             'Inner Mongolia Autonomous Region', 'Shanxi', 'Hainan', 'Gansu', 'Xinjiang Uyghur Autonomous Region',
             'Central and Western District', 'Sai Kung District', 'Kowloon City', 'Tai Po District', 'Sha Tin',
             'Tsuen Wan District', 'Tuen Mun', 'Yau Tsim Mong', 'Eastern', 'Islands District', 'Kwun Tong', 'Wan Chai',
             'Wong Tai Sin', 'Yuen Long District', 'TW', 'MO']

us_region = ['', 'Illinois', 'California', 'Virginia', 'Oregon', 'Iowa', 'New Jersey', 'Texas', 'Washington',
             'North Carolina', 'Ohio', 'Georgia', 'Florida', 'New York', 'Missouri', 'South Carolina', 'Kansas',
             'Arizona', 'Colorado', 'Pennsylvania', 'Wisconsin', 'Maine', 'Michigan', 'Nevada', 'Indiana', 'Oklahoma',
             'Utah', 'Massachusetts', 'Nebraska', 'Minnesota', 'Connecticut', 'District of Columbia', 'Maryland',
             'Alabama', 'New Mexico', 'Kentucky', 'Mississippi', 'Tennessee', 'South Dakota', 'Louisiana', 'Arkansas',
             'Delaware', 'Idaho', 'Montana', 'New Hampshire', 'Wyoming', 'Hawaii', 'North Dakota', 'West Virginia',
             'Alaska']


def get_data():
    # 创建子线程执行
    t1 = threading.Thread(target=getFFData)
    t1.start()


# 获取接口数据
def getFFData():
    regu = reg_txt.get()
    siz = size_text.get()
    pag = page_text.get()
    file_string = r'\\' + file_txt.get() + '.txt'

    if 'country="CN"' in regu:
        loop_region(cn_region, regu, siz, pag, file_string)
    elif 'country="US"' in regu:
        loop_region(us_region, regu, siz, pag, file_string)
    else:
        do_search(regu, siz, pag, file_string)
    messagebox.showwarning("通知!", "爬取完成!")


def loop_region(region_array, regu, siz, pag, file_string):
    for region in region_array:
        # regu += "&& region=\"" + region + "\""
        do_search(regu + "&& region=\"" + region + "\"", siz, pag, file_string)


def do_search(regu, siz, pag, file_string):
    # print(regu)
    txt.insert(INSERT, regu + "\n")
    txt.see(END)
    flag = base64.b64encode(regu.encode()).decode()
    # print(API_url.format(email, key, flag, pag, siz))
    for i in range(1, int(pag) + 1):
        print(i)
        try:
            res = requests.get(API_url.format(email, key, flag, str(i), siz))
            print(API_url.format(email, key, flag, str(i), siz))
            # print(res.json()["error"])

            if res.json()["error"]:
                print("没有数据")
                # messagebox.showwarning("警告!", "没有数据!")
                txt.insert(INSERT, "警告!,没有数据!" + "\n")
                txt.see(END)
                break


            else:
                results = res.json()["results"]
                # print(results)
                if len(results) == 0:
                    # messagebox.showwarning("警告!", "没有这么多页数据!当前空页:" + str(i))
                    txt.insert(INSERT, "警告!,没有这么多页数据!当前空页:" + str(i) + "\n")
                    txt.see(END)
                    break
                for result in results:
                    write_data(desktop_path() + file_string, result[0] + "\n")
                    txt.insert(INSERT, str(result[0]) + "\n")
                    txt.see(END)

        except:
            # messagebox.showwarning("警告!", "爬取出现错误!")
            txt.insert(INSERT, "警告!,爬取出现错误!" + "\n")
            txt.see(END)


def desktop_path():
    return os.path.join(os.path.expanduser('~'), "Desktop")


def write_data(path, data):
    with open(path, 'a', encoding='utf-8') as f:
        f.write(data)


def reset():
    reg_txt.delete(0, END)
    page_text.delete(0, END)
    txt.delete(0.1, END)


root = Tk()  # Makes main window
root.wm_title("FOFA_V1.0爬虫")  # 标题
# window.config(background="#00FFCC")  # 背景色
root.geometry('500x240')
reg = Label(root, text='请输入搜索规则')
reg.place(relx=0, rely=0, relwidth=0.7, height=25)
reg_txt = Entry(root)
reg_txt.place(relx=0, rely=0.1, relwidth=0.7, height=25)
size = Label(root, text='请输入长度,默认100,最大10000')
size.place(relx=0, rely=0.2, relwidth=0.7, relheight=0.1)
size_text = Entry(root)
size_text.place(relx=0, rely=0.3, relwidth=0.7, relheight=0.1)

page = Label(root, text='请输入爬取页数')
page.place(relx=0, rely=0.4, relwidth=0.7, relheight=0.1)
page_text = Entry(root)
page_text.place(relx=0, rely=0.5, relwidth=0.7, relheight=0.1)

file_ = Label(root, text='保存文本名称')
file_.place(relx=0, rely=0.6, relwidth=0.7, relheight=0.1)
file_txt = Entry(root)
file_txt.place(relx=0, rely=0.7, relwidth=0.7, relheight=0.1)

btn1 = Button(root, text='开始爬取', command=get_data)
btn1.place(relx=0, rely=0.8, relwidth=0.3, relheight=0.1)

btn2 = Button(root, text='重置', command=reset)
btn2.place(relx=0.5, rely=0.8, relwidth=0.3, relheight=0.1)

txt = Text(wrap=WORD)
scroll = Scrollbar()
# 放到窗口的右侧, 填充Y竖直方向
scroll.pack(side=RIGHT, fill=Y)
# 两个控件关联
scroll.config(command=txt.yview)
txt.config(yscrollcommand=scroll.set)
txt.place(rely=0.9, relheight=0.4)

if __name__ == '__main__':
    root.mainloop()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python爬取FOFA数据的示例代码中的each_dic['ip'] = each[0] 表示将FOFA数据中每个元素的第一个值赋值给字典 each_dic 的 'ip' 键。 在使用 Python 爬取 FOFA 数据时,我们通常会通过编写代码来获取所需的数据,并存储成一个字典。在每次获取到一个数据元素时,我们可以使用列表的下标索引来访问相应的值。 例如,假设我们从 FOFA爬取到了一组数据,其中每个元素是一个列表,列表中的第一个值表示 IP 地址。我们使用 each[0] 这样的索引来获取每个元素的第一个值。 接下来,我们可以将每个元素的第一个值赋值给字典 each_dic 中的 'ip' 键。这样,每次获取到的 IP 地址就会被存储到字典 each_dic 中,以便后续的处理和使用。 示例代码如下: ```python # 导入所需的库 import requests # 设置请求头 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 发送请求 response = requests.get('http://www.example.com', headers=headers) # 解析数据 data = response.json() # 创建字典 each_dic = {} # 遍历每个数据元素 for each in data: # 将每个元素的第一个值赋值给 'ip' 键 each_dic['ip'] = each[0] # 进行后续的处理和使用 # ... ``` 以上代码是一个简单的示例,演示了如何使用 Python 爬取 FOFA 数据,并将其中的每个元素的第一个值赋值给字典的 'ip' 键。实际使用中,可能还需要进行其他数据处理和存储操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值