add some scripts.
This commit is contained in:
@ -31,6 +31,8 @@ import csv
|
|||||||
import logging
|
import logging
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
import re
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from requests.exceptions import RequestException
|
from requests.exceptions import RequestException
|
||||||
import config
|
import config
|
||||||
@ -43,17 +45,19 @@ res_dir = './result'
|
|||||||
res_json_file = f'{res_dir}/detail.json'
|
res_json_file = f'{res_dir}/detail.json'
|
||||||
res_csv_file = f'{res_dir}/detail.csv'
|
res_csv_file = f'{res_dir}/detail.csv'
|
||||||
input_json_file = f'{res_dir}/merged.json'
|
input_json_file = f'{res_dir}/merged.json'
|
||||||
|
performers_dir = f'{res_dir}/performers'
|
||||||
|
|
||||||
# 存储结果
|
# 存储结果
|
||||||
final_data = []
|
final_data = []
|
||||||
|
|
||||||
# 读取 detail.json 中的 href
|
# 读取 detail.json 中的 数据,以便于断点续传
|
||||||
def load_existing_hrefs():
|
def load_existing_hrefs():
|
||||||
existing_hrefs = set()
|
existing_hrefs = set()
|
||||||
|
global final_data
|
||||||
try:
|
try:
|
||||||
with open(res_json_file, 'r') as file:
|
with open(res_json_file, 'r') as file:
|
||||||
data = json.load(file)
|
final_data = json.load(file)
|
||||||
for entry in data:
|
for entry in final_data:
|
||||||
existing_hrefs.add(entry['href'])
|
existing_hrefs.add(entry['href'])
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
logging.info("detail.json not found, starting fresh.")
|
logging.info("detail.json not found, starting fresh.")
|
||||||
@ -65,7 +69,7 @@ def fetch_and_parse_page(url, scraper):
|
|||||||
response = scraper.get(url)
|
response = scraper.get(url)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
logging.warning(f"Failed to fetch {url}, Status code: {response.status_code}")
|
logging.warning(f"Failed to fetch {url}, Status code: {response.status_code}")
|
||||||
return None
|
return None, None
|
||||||
|
|
||||||
# 解析 HTML 内容
|
# 解析 HTML 内容
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
@ -92,6 +96,47 @@ def fetch_and_parse_page(url, scraper):
|
|||||||
}
|
}
|
||||||
reversed_map = {v: k for k, v in fields.items()}
|
reversed_map = {v: k for k, v in fields.items()}
|
||||||
|
|
||||||
|
# 解析表格数据
|
||||||
|
movies = []
|
||||||
|
vixen_cnt = 0
|
||||||
|
blacked_cnt = 0
|
||||||
|
tushy_cnt = 0
|
||||||
|
x_art_cnt = 0
|
||||||
|
table = soup.find('table', id='personal')
|
||||||
|
if table:
|
||||||
|
rows = table.find_all('tr', class_='we')
|
||||||
|
for row in rows:
|
||||||
|
cols = row.find_all('td')
|
||||||
|
if len(cols) >= 6:
|
||||||
|
title = cols[0].text.strip()
|
||||||
|
year = cols[1].text.strip()
|
||||||
|
distributor = cols[2].text.strip().lower()
|
||||||
|
notes = cols[3].text.strip()
|
||||||
|
rev = cols[4].text.strip()
|
||||||
|
formats = cols[5].text.strip()
|
||||||
|
|
||||||
|
# 统计 distributor 中的关键词
|
||||||
|
if 'vixen' in distributor:
|
||||||
|
vixen_cnt += 1
|
||||||
|
if 'blacked' in distributor:
|
||||||
|
blacked_cnt += 1
|
||||||
|
if 'tushy' in distributor:
|
||||||
|
tushy_cnt += 1
|
||||||
|
if 'x_art' in distributor:
|
||||||
|
x_art_cnt += 1
|
||||||
|
|
||||||
|
movies.append({
|
||||||
|
'title': title,
|
||||||
|
'year': year,
|
||||||
|
'distributor': distributor,
|
||||||
|
'notes': notes,
|
||||||
|
'rev': rev,
|
||||||
|
'formats': formats
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
logging.warning(f"movie table empty. ")
|
||||||
|
|
||||||
|
|
||||||
# 遍历每个 bioheading
|
# 遍历每个 bioheading
|
||||||
bioheadings = soup.find_all('p', class_='bioheading')
|
bioheadings = soup.find_all('p', class_='bioheading')
|
||||||
for bio in bioheadings:
|
for bio in bioheadings:
|
||||||
@ -112,11 +157,18 @@ def fetch_and_parse_page(url, scraper):
|
|||||||
if heading in reversed_map:
|
if heading in reversed_map:
|
||||||
kkey = reversed_map[heading]
|
kkey = reversed_map[heading]
|
||||||
data[kkey] = biodata
|
data[kkey] = biodata
|
||||||
|
|
||||||
|
# 添加统计数据到 data
|
||||||
|
data['movies_cnt'] = len(movies)
|
||||||
|
data['vixen_cnt'] = vixen_cnt
|
||||||
|
data['blacked_cnt'] = blacked_cnt
|
||||||
|
data['tushy_cnt'] = tushy_cnt
|
||||||
|
data['x_art_cnt'] = x_art_cnt
|
||||||
|
|
||||||
return data
|
return data, movies
|
||||||
except RequestException as e:
|
except RequestException as e:
|
||||||
logging.error(f"Error fetching {url}: {e}")
|
logging.error(f"Error fetching {url}: {e}")
|
||||||
return None
|
return None, None
|
||||||
|
|
||||||
# 写入 detail.json
|
# 写入 detail.json
|
||||||
def write_to_detail_json(data):
|
def write_to_detail_json(data):
|
||||||
@ -128,13 +180,24 @@ def write_to_csv(data):
|
|||||||
try:
|
try:
|
||||||
with open(res_csv_file, 'w', newline='', encoding='utf-8') as csvfile:
|
with open(res_csv_file, 'w', newline='', encoding='utf-8') as csvfile:
|
||||||
writer = csv.writer(csvfile, delimiter=',')
|
writer = csv.writer(csvfile, delimiter=',')
|
||||||
header = ['person', 'href', 'performer_aka', 'birthday', 'astrology', 'birthplace', 'gender', 'years_active', 'ethnicity', 'nationality', 'hair_colors', 'eye_color', 'height', 'weight', 'measurements', 'tattoos', 'piercings']
|
header = ['person', 'href', 'performer_aka', 'birthday', 'astrology', 'birthplace', 'gender', 'years_active', 'ethnicity',
|
||||||
|
'nationality', 'hair_colors', 'eye_color', 'height', 'weight', 'measurements', 'tattoos', 'piercings',
|
||||||
|
'movies_cnt', 'vixen_cnt', 'blacked_cnt', 'tushy_cnt', 'x_art_cnt']
|
||||||
writer.writerow(header)
|
writer.writerow(header)
|
||||||
for entry in data:
|
for entry in data:
|
||||||
|
# 确保 performer_aka 始终为列表类型
|
||||||
|
performer_aka = entry.get('performer_aka', [])
|
||||||
|
|
||||||
|
# 如果是 None 或非列表类型,转换为一个空列表
|
||||||
|
if performer_aka is None:
|
||||||
|
performer_aka = []
|
||||||
|
elif not isinstance(performer_aka, list):
|
||||||
|
performer_aka = [performer_aka]
|
||||||
|
|
||||||
writer.writerow([
|
writer.writerow([
|
||||||
entry.get('person', ''),
|
entry.get('person', ''),
|
||||||
entry.get('href', ''),
|
entry.get('href', ''),
|
||||||
'|'.join(entry.get('performer_aka', [])),
|
'|'.join(performer_aka),
|
||||||
entry.get('birthday', ''),
|
entry.get('birthday', ''),
|
||||||
entry.get('astrology', ''),
|
entry.get('astrology', ''),
|
||||||
entry.get('birthplace', ''),
|
entry.get('birthplace', ''),
|
||||||
@ -148,7 +211,12 @@ def write_to_csv(data):
|
|||||||
entry.get('weight', ''),
|
entry.get('weight', ''),
|
||||||
entry.get('measurements', ''),
|
entry.get('measurements', ''),
|
||||||
entry.get('tattoos', ''),
|
entry.get('tattoos', ''),
|
||||||
entry.get('piercings', '')
|
entry.get('piercings', ''),
|
||||||
|
entry.get('movies_cnt', 0),
|
||||||
|
entry.get('vixen_cnt', 0),
|
||||||
|
entry.get('blacked_cnt', 0),
|
||||||
|
entry.get('tushy_cnt', 0),
|
||||||
|
entry.get('x_art_cnt', 0)
|
||||||
])
|
])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Error writing to CSV: {e}")
|
logging.error(f"Error writing to CSV: {e}")
|
||||||
@ -159,21 +227,49 @@ def handle_exit_signal(signal, frame):
|
|||||||
write_to_detail_json(final_data)
|
write_to_detail_json(final_data)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
# 创建目录
|
||||||
|
def create_directory_for_person(person):
|
||||||
|
# 获取 person 的前两个字母并转为小写
|
||||||
|
person_dir = person[:1].lower()
|
||||||
|
full_path = os.path.join(performers_dir, person_dir)
|
||||||
|
if not os.path.exists(full_path):
|
||||||
|
os.makedirs(full_path)
|
||||||
|
return full_path
|
||||||
|
|
||||||
|
# 从 https://www.iafd.com/person.rme/id=21898a3c-1ddd-4793-8d93-375d6db20586 中抽取 id 的值
|
||||||
|
def extract_id_from_href(href):
|
||||||
|
"""从href中提取id参数"""
|
||||||
|
match = re.search(r'id=([a-f0-9\-]+)', href)
|
||||||
|
return match.group(1) if match else ''
|
||||||
|
|
||||||
|
# 写入每个 performer 的单独 JSON 文件
|
||||||
|
def write_person_json(person, href, data):
|
||||||
|
# 获取目录
|
||||||
|
person_dir = create_directory_for_person(person)
|
||||||
|
person_id = extract_id_from_href(href)
|
||||||
|
person_filename = f"{person.replace(' ', '-')}({person_id}).json" # 用 - 替换空格
|
||||||
|
full_path = os.path.join(person_dir, person_filename)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(full_path, 'w', encoding='utf-8') as json_file:
|
||||||
|
json.dump(data, json_file, indent=4, ensure_ascii=False)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error writing file {full_path}: {e}")
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# 初始化 cloudscraper
|
# 初始化 cloudscraper
|
||||||
scraper = cloudscraper.create_scraper()
|
scraper = cloudscraper.create_scraper()
|
||||||
|
|
||||||
# 加载已存在的 href 列表
|
# 加载已存在的 href 列表
|
||||||
|
global final_data
|
||||||
existing_hrefs = load_existing_hrefs()
|
existing_hrefs = load_existing_hrefs()
|
||||||
|
logging.info(f"load data from {res_json_file}, count: {len(final_data)}")
|
||||||
|
|
||||||
# 读取 merged.json
|
# 读取 merged.json
|
||||||
with open(input_json_file, 'r') as file:
|
with open(input_json_file, 'r') as file:
|
||||||
merged_data = json.load(file)
|
merged_data = json.load(file)
|
||||||
|
|
||||||
# 注册退出信号
|
|
||||||
signal.signal(signal.SIGINT, handle_exit_signal) # Handle Ctrl+C
|
|
||||||
signal.signal(signal.SIGTERM, handle_exit_signal) # Handle kill signal
|
|
||||||
|
|
||||||
# 遍历 merged.json 中的数据
|
# 遍历 merged.json 中的数据
|
||||||
loop = 0
|
loop = 0
|
||||||
for entry in merged_data:
|
for entry in merged_data:
|
||||||
@ -187,30 +283,51 @@ def main():
|
|||||||
logging.info(f"Processing {href} - {person}")
|
logging.info(f"Processing {href} - {person}")
|
||||||
|
|
||||||
# 获取并解析数据
|
# 获取并解析数据
|
||||||
data = fetch_and_parse_page(href, scraper)
|
while True:
|
||||||
if data:
|
data, movies = fetch_and_parse_page(href, scraper)
|
||||||
# 如果数据正确,加入到 final_data
|
if data is None:
|
||||||
final_data.append({
|
logging.warning(f'Retring {href} - {person} ')
|
||||||
'href': href,
|
time.sleep(3)
|
||||||
'person': person,
|
else:
|
||||||
**data
|
break
|
||||||
})
|
|
||||||
loop = loop+1
|
# 如果数据正确,加入到 final_data
|
||||||
if loop % 100 == 0:
|
final_data.append({
|
||||||
# 更新 detail.json 文件
|
'href': href,
|
||||||
print(f'flush data to json file. now data count: {loop}')
|
'person': person,
|
||||||
write_to_detail_json(final_data)
|
**data
|
||||||
|
})
|
||||||
# 更新已存在的 href
|
|
||||||
existing_hrefs.add(href)
|
# 写入 performer 的独立 JSON 文件
|
||||||
|
full_data = {
|
||||||
|
'href': href,
|
||||||
|
'person': person,
|
||||||
|
**data,
|
||||||
|
'movies': movies if movies else []
|
||||||
|
}
|
||||||
|
write_person_json(person.strip(), href, full_data)
|
||||||
|
|
||||||
|
# 更新 detail.json 文件
|
||||||
|
loop = loop + 1
|
||||||
|
if loop % 100 == 0:
|
||||||
|
logging.info(f'flush data to json file. now fetched data count: {loop}, total count: {len(final_data)}')
|
||||||
|
write_to_detail_json(final_data)
|
||||||
|
write_to_csv(final_data)
|
||||||
|
|
||||||
|
# 更新已存在的 href
|
||||||
|
existing_hrefs.add(href)
|
||||||
|
|
||||||
# 延时,防止请求过快被封锁
|
# 延时,防止请求过快被封锁
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
# 完成后一次性写入 CSV
|
|
||||||
write_to_csv(final_data)
|
|
||||||
|
|
||||||
logging.info("Data processing completed.")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
try:
|
||||||
|
# 注册退出信号
|
||||||
|
signal.signal(signal.SIGINT, handle_exit_signal) # Handle Ctrl+C
|
||||||
|
signal.signal(signal.SIGTERM, handle_exit_signal) # Handle kill signal
|
||||||
|
main()
|
||||||
|
finally:
|
||||||
|
# 清理操作,保证在程序正常退出时执行
|
||||||
|
write_to_csv(final_data) # Write to CSV or other necessary tasks
|
||||||
|
write_to_detail_json(final_data) # Save data to JSON
|
||||||
|
logging.info("Data processing completed.")
|
||||||
@ -27,6 +27,7 @@ Modification History:
|
|||||||
import json
|
import json
|
||||||
import csv
|
import csv
|
||||||
import os
|
import os
|
||||||
|
import argparse
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
# 读取文件并返回内容
|
# 读取文件并返回内容
|
||||||
@ -76,24 +77,41 @@ def save_to_csv(data, output_file):
|
|||||||
|
|
||||||
# 主函数,执行数据处理并保存
|
# 主函数,执行数据处理并保存
|
||||||
def main():
|
def main():
|
||||||
|
# 使用 argparse 获取命令行参数
|
||||||
|
parser = argparse.ArgumentParser(description="合并多个 JSON 文件并输出到一个新的 JSON 和 CSV 文件")
|
||||||
|
parser.add_argument('files', nargs='+', choices=['birth', 'astro', 'ethnic'],
|
||||||
|
help="指定需要合并的文件, 至少两个, 最多三个: birth, astro, ethnic")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# 确保至少选择两个文件
|
||||||
|
if len(args.files) < 2:
|
||||||
|
print("请至少选择两个文件进行合并。")
|
||||||
|
return
|
||||||
|
|
||||||
# 定义需要处理的文件
|
# 定义需要处理的文件
|
||||||
files = [
|
file_map = {
|
||||||
{'path': 'result/birth.json', 'name': 'birth'},
|
'birth': 'result/birth.json',
|
||||||
{'path': 'result/astro.json', 'name': 'astro'},
|
'astro': 'result/astro.json',
|
||||||
{'path': 'result/ethnic.json', 'name': 'ethnic'}
|
'ethnic': 'result/ethnic.json'
|
||||||
]
|
}
|
||||||
|
|
||||||
|
files = [{'path': file_map[file], 'name': file} for file in args.files]
|
||||||
|
|
||||||
# 处理数据
|
# 处理数据
|
||||||
processed_data = process_data(files)
|
processed_data = process_data(files)
|
||||||
|
|
||||||
|
# 根据输入的文件名生成 merged 文件名
|
||||||
|
output_json_file = f'result/merged_{"_".join(args.files)}.json'
|
||||||
|
output_csv_file = f'result/merged_{"_".join(args.files)}.csv'
|
||||||
|
|
||||||
# 确保 result 目录存在
|
# 确保 result 目录存在
|
||||||
os.makedirs('result', exist_ok=True)
|
os.makedirs('result', exist_ok=True)
|
||||||
|
|
||||||
# 输出结果到 JSON 和 CSV 文件
|
# 输出结果到 JSON 和 CSV 文件
|
||||||
save_to_json(processed_data, 'result/merged.json')
|
save_to_json(processed_data, output_json_file)
|
||||||
save_to_csv(processed_data, 'result/merged.csv')
|
save_to_csv(processed_data, output_csv_file)
|
||||||
|
|
||||||
print("数据处理完成,结果已保存到 result/merged.json 和 result/merged.csv")
|
print(f"数据处理完成,结果已保存到 {output_json_file} 和 {output_csv_file}")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
@ -1,18 +1,46 @@
|
|||||||
person,href,performer_aka,birthday,astrology,birthplace,gender,years_active,ethnicity,nationality,hair_colors,eye_color,height,weight,measurements,tattoos,piercings
|
person,href,performer_aka,birthday,astrology,birthplace,gender,years_active,ethnicity,nationality,hair_colors,eye_color,height,weight,measurements,tattoos,piercings,movies_cnt,vixen_cnt,blacked_cnt,tushy_cnt,x_art_cnt
|
||||||
Aaliyah,https://www.iafd.com/person.rme/id=50caabcd-c270-4d4a-b80f-2429201f6ff5,No known aliases,01/01/????,Capricorn,US,Trans woman,2006-2007,Black,American,Black/Dark Brown,Unknown,"5 feet, 5 inches (165 cm)",123 lbs (56 kg),No data,No data,No data
|
Desiree Cousteau,https://www.iafd.com/person.rme/id=02468dae-0585-420a-a0e4-51d87d2926bd,Deseree Clearbranch|Deseree Cousteau|Desiree Clearbranch|Desiree Costau|Desiree Costeau|Desirée Costeau|Desireé Cousteau|Desirée Cousteau|Désirée Cousteau|Desiree Cousteaus|Desirée Cousteaus,"January 1, 1956 (69 years old)",Capricorn,"Savannah, Georgia",Woman,1978-1983 (Started around 22 years old),Caucasian,American,Black/Brown/Auburn,Brown,No data,No data,34D-25-35,No data,No data,0,0,0,0,0
|
||||||
Amanda Addams,https://www.iafd.com/person.rme/id=67bdb3b8-adf6-4ce5-9278-73a5777b459e,Amanda Adams|Amanda Stone|Camile|Camille|Emily Moore,01/01/????,Capricorn,"New Port Richey, FL",Woman,1990-1997,Caucasian,American,Brown/Red,Unknown,No data,No data,42DD-??-??,Flower with stem and leaves right breast,None
|
Heather Deeley,https://www.iafd.com/person.rme/id=a2059292-32d2-4f90-baeb-30167c075780,No known aliases,"January 1, 1956 (69 years old)",Capricorn,"Suffolk, England, UK",Woman,,Caucasian,English,,Unknown,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
Ashley,https://www.iafd.com/person.rme/id=44d0ecd8-c519-40b4-83aa-cdfe9670d238,No known aliases,01/01/????,Capricorn,No data,Trans woman,,Latin,Mexican,,Unknown,No data,No data,No data,No data,No data
|
Eva Orlowsky,https://www.iafd.com/person.rme/id=ee34b1da-13a8-4104-8c97-f5b4dcd49ae0,Ava|Ava Orlousky|Eva Orloski|Eva Orlosky|Eva Orlowski|Eva Orwloschi|Eva Orwlosky|Eva Pistarino|Orloski,"January 1, 1962 (63 years old)",Capricorn,"Genoa, Italy",Woman,1989-1995 (Started around 27 years old),Caucasian,Italian,,Unknown,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
Daniela Canalis,https://www.iafd.com/person.rme/id=3b2728e0-6eac-4620-8e3f-5086d3cbaa24,Daniele|Danyelle Comini|Isabella Bittencour,01/01/????,Capricorn,"Belo Horizonte, Brazil",Trans woman,2003-2006,Caucasian,Brazilian,,Blue,"5 feet, 5 inches (165 cm)",No data,No data,No data,No data
|
Steve Hard,https://www.iafd.com/person.rme/id=8f608d9e-471d-4370-b9f6-3a8cf38f7837,Ivan Salacso|Ivan Salcso|Ivano Prati|Michael|Sterling Moss|Steven Hard|Tony Muflone,"January 1, 1964 (61 years old)",Capricorn,"Varpalota, Hungary",Man,1996-1998 (Started around 32 years old),Caucasian,Hungarian,,Unknown,No data,No data,,No data,No data,0,0,0,0,0
|
||||||
Dream Doll,https://www.iafd.com/person.rme/id=481fd985-9740-4c1b-b794-4620d6528cc1,No known aliases,01/01/????,Capricorn,USA,Trans woman,,Black,American,,Unknown,No data,No data,No data,"""Theresa"" right front shoulder; Stars right lower arm; ""Locked Loyalty"" inner left lower arm; Flower right hip",Right cheekbone
|
Michelle Meadows,https://www.iafd.com/person.rme/id=06c9b89e-0ee9-46dd-ab22-fc9b97bccd9f,Jane Blond|Michele Meadows,"January 1, 1965 (60 years old)",Capricorn,Canada,Woman,2012-2014 (Started around 47 years old),Caucasian,Canadian,,Blue,"5 feet, 9 inches (176 cm)",134 lbs (61 kg),34D-??-??,Dolphins on lower back,None,4,0,0,0,0
|
||||||
Gianna,https://www.iafd.com/person.rme/id=8e22a8e0-e28e-4767-ad74-cae7a1ef6f15,No known aliases,01/01/????,Capricorn,No data,Trans woman,2006-2009,Caucasian,No data,,Unknown,No data,No data,No data,No data,No data
|
Joey Stefano,https://www.iafd.com/person.rme/id=29e722ce-98ba-46b7-b9d1-c4643348eeda,Joey Stephano|Joey Syefano,"January 1, 1968 (would be 57 years old)",Capricorn,"Chester, PA, USA",Man,1989-1994 (Started around 21 years old),Caucasian,American,,Unknown,"5 feet, 10 inches (178 cm)",No data,,(Later) Right Biceps,None,0,0,0,0,0
|
||||||
Kirsten,https://www.iafd.com/person.rme/id=ca699282-1b57-4ce7-9bcc-d7799a292e34,Kirsten Claudia|Trish,01/01/????,Capricorn,No data,Trans woman,,Latin,No data,Black/Brown/Light Brown,Unknown,No data,No data,36DD-24-35,No data,No data
|
Nikki Santana,https://www.iafd.com/person.rme/id=4d216d38-eaa9-4188-9cf1-6a55b2e5cae4,Naughty Nikki|Nikki,"January 1, 1968 (57 years old)",Capricorn,"San Gabriel Valley, CA",Woman,2000-2009 (Started around 32 years old),Latin,Mexican,Black/Brown,Unknown,"5 feet, 9 inches (175 cm)",149 lbs (68 kg),40EE-29-38,Rose on lower back; band around right upper arm,No data,4,0,0,0,0
|
||||||
Maya,https://www.iafd.com/person.rme/id=fae84552-50cf-494b-b34f-a22e1a669fd9,No known aliases,01/01/????,Capricorn,No data,Trans woman,,Latin/Multi-ethnic,No data,Black/Dark Brown,Unknown,"5 feet, 5 inches (165 cm)",125 lbs (57 kg),No data,No data,No data
|
Serge Scott,https://www.iafd.com/person.rme/id=925c3431-31c4-4536-84f9-15d5b7498f24,No known aliases,"January 1, 1968 (57 years old)",Capricorn,"London, UK",Man,,Caucasian,English,,Unknown,"5 feet, 3 inches (160 cm)",189 lbs (86 kg),,No data,No data,0,0,0,0,0
|
||||||
Paris,https://www.iafd.com/person.rme/id=79724d4a-dbd4-4e15-9d90-a49ec2a6bde1,No known aliases,01/01/????,Capricorn,US,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,No data
|
Tom Southern,https://www.iafd.com/person.rme/id=5ab3717b-a8f0-4102-b9d0-218f20296e54,Thom Southern|Tom,"January 1, 1968 (57 years old)",Capricorn,"Nashville, TN, USA",Man,1999-2010 (Started around 31 years old),Caucasian,American,Brown/Bald,Brown,"6 feet, 1 inches (185 cm)",200 lbs (91 kg),,Right shoulder; Tribal on left shoulder and upper left biceps,Nipples,0,0,0,0,0
|
||||||
Shaniah,https://www.iafd.com/person.rme/id=fcb9e75d-3086-4950-a48a-599ae053c8cf,No known aliases,01/01/????,Capricorn,US,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,Navel
|
D. Wise,https://www.iafd.com/person.rme/id=65902e2e-2fb7-4815-b5db-6960deda2e7b,"Winner: Best Group Sex Scene|,|Orgy World: The Next Level 7|(2004)","January 1, 1969 (would be 56 years old)",Capricorn,No data,Man,,Black,American,,Unknown,No data,No data,,None,None,11,0,0,0,0
|
||||||
Tosha,https://www.iafd.com/person.rme/id=37b08999-7ba0-460b-9a26-f6be57406ded,No known aliases,01/01/????,Capricorn,Maryland,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,No data
|
Harley Davis,https://www.iafd.com/person.rme/id=99f60b64-41b8-4fd5-a5ef-e81429a54b08,Danaca Grey|Danica Grey|Dannaka Grey|Dannica Gray|Dannica Grey|Harley,"January 1, 1970 (55 years old)",Capricorn,"Dallas, Texas",Woman,2001-2006 (Started around 31 years old),Caucasian,American,,Hazel,"5 feet, 4 inches (163 cm)",121 lbs (55 kg),34DD-25-35,None,None,2,0,0,0,0
|
||||||
Viktoria,https://www.iafd.com/person.rme/id=e585c62f-8df6-4312-a023-9563e6b559e5,No known aliases,01/01/????,Capricorn,Russia,Trans woman,,Caucasian,Russian,,Unknown,No data,No data,No data,No data,No data
|
Johnny Thrust,https://www.iafd.com/person.rme/id=78c4a421-4481-43e6-b9cc-bcd377ab5c28,"Nominee: Best Oral Sex Scene: Video,|Gag Factor 9|(2002)","January 1, 1970 (55 years old)",Capricorn,"Los Angeles County, CA, USA",Man,,Caucasian,American,,Brown,"5 feet, 7 inches (170 cm)",129 lbs (59 kg),,None,Ears,16,0,0,0,0
|
||||||
Maryanne Fisher,https://www.iafd.com/person.rme/id=21898a3c-1ddd-4793-8d93-375d6db20586,No known aliases,01/01/19??,Capricorn,No data,Woman,,Caucasian,No data,,Unknown,No data,No data,No data,No data,No data
|
Aaliyah,https://www.iafd.com/person.rme/id=50caabcd-c270-4d4a-b80f-2429201f6ff5,No known aliases,01/01/????,Capricorn,US,Trans woman,2006-2007,Black,American,Black/Dark Brown,Unknown,"5 feet, 5 inches (165 cm)",123 lbs (56 kg),No data,No data,No data,3,0,0,0,0
|
||||||
Claude Marcault,https://www.iafd.com/person.rme/id=19971b82-648b-4795-9fd5-a0f7c3ed867f,No known aliases,"January 1, 1941 (would be 84 years old)",Capricorn,India,Woman,,Caucasian,French,,Unknown,No data,No data,No data,No data,No data
|
Amanda Addams,https://www.iafd.com/person.rme/id=67bdb3b8-adf6-4ce5-9278-73a5777b459e,Amanda Adams|Amanda Stone|Camile|Camille|Emily Moore,01/01/????,Capricorn,"New Port Richey, FL",Woman,1990-1997,Caucasian,American,Brown/Red,Unknown,No data,No data,42DD-??-??,Flower with stem and leaves right breast,None,0,0,0,0,0
|
||||||
Fernando Arcangeli,https://www.iafd.com/person.rme/id=b32894f5-d15f-40fa-8048-daa6cfa6e480,Ferdinando Arcangeli|Mimì Losy,"January 1, 1942 (83 years old)",Capricorn,"Province of Rome, Italy",Man,1976-1983 (Started around 34 years old),Caucasian,Italian,,Unknown,No data,No data,,No data,No data
|
Ashley,https://www.iafd.com/person.rme/id=44d0ecd8-c519-40b4-83aa-cdfe9670d238,No known aliases,01/01/????,Capricorn,No data,Trans woman,,Latin,Mexican,,Unknown,No data,No data,No data,No data,No data,1,0,0,0,0
|
||||||
Doris Arden,https://www.iafd.com/person.rme/id=585e3afc-9525-48cd-a1d7-9895049c3948,No known aliases,"January 1, 1946 (79 years old)",Capricorn,"Trostberg, Bavaria, Germany",Woman,,Caucasian,German,,Hazel,No data,No data,No data,No data,No data
|
Daniela Canalis,https://www.iafd.com/person.rme/id=3b2728e0-6eac-4620-8e3f-5086d3cbaa24,Daniele|Danyelle Comini|Isabella Bittencour,01/01/????,Capricorn,"Belo Horizonte, Brazil",Trans woman,2003-2006,Caucasian,Brazilian,,Blue,"5 feet, 5 inches (165 cm)",No data,No data,No data,No data,1,0,0,0,0
|
||||||
Ennio Pontis,https://www.iafd.com/person.rme/id=b2aa39b4-644d-4f61-b088-2ff80ed344b3,No known aliases,"January 1, 1951 (74 years old)",Capricorn,"Rome, Italy",Man,,Caucasian,Italian,,Unknown,No data,No data,,No data,No data
|
Dream Doll,https://www.iafd.com/person.rme/id=481fd985-9740-4c1b-b794-4620d6528cc1,No known aliases,01/01/????,Capricorn,USA,Trans woman,,Black,American,,Unknown,No data,No data,No data,"""Theresa"" right front shoulder; Stars right lower arm; ""Locked Loyalty"" inner left lower arm; Flower right hip",Right cheekbone,2,0,0,0,0
|
||||||
|
Gianna,https://www.iafd.com/person.rme/id=8e22a8e0-e28e-4767-ad74-cae7a1ef6f15,No known aliases,01/01/????,Capricorn,No data,Trans woman,2006-2009,Caucasian,No data,,Unknown,No data,No data,No data,No data,No data,5,0,0,0,0
|
||||||
|
Kirsten,https://www.iafd.com/person.rme/id=ca699282-1b57-4ce7-9bcc-d7799a292e34,Kirsten Claudia|Trish,01/01/????,Capricorn,No data,Trans woman,,Latin,No data,Black/Brown/Light Brown,Unknown,No data,No data,36DD-24-35,No data,No data,1,0,0,0,0
|
||||||
|
Maya,https://www.iafd.com/person.rme/id=fae84552-50cf-494b-b34f-a22e1a669fd9,No known aliases,01/01/????,Capricorn,No data,Trans woman,,Latin/Multi-ethnic,No data,Black/Dark Brown,Unknown,"5 feet, 5 inches (165 cm)",125 lbs (57 kg),No data,No data,No data,1,0,0,0,0
|
||||||
|
Paris,https://www.iafd.com/person.rme/id=79724d4a-dbd4-4e15-9d90-a49ec2a6bde1,No known aliases,01/01/????,Capricorn,US,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,No data,2,0,0,0,0
|
||||||
|
Shaniah,https://www.iafd.com/person.rme/id=fcb9e75d-3086-4950-a48a-599ae053c8cf,No known aliases,01/01/????,Capricorn,US,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,Navel,1,0,0,0,0
|
||||||
|
Tosha,https://www.iafd.com/person.rme/id=37b08999-7ba0-460b-9a26-f6be57406ded,No known aliases,01/01/????,Capricorn,Maryland,Trans woman,,Black,American,,Unknown,No data,No data,No data,No data,No data,2,0,0,0,0
|
||||||
|
Viktoria,https://www.iafd.com/person.rme/id=e585c62f-8df6-4312-a023-9563e6b559e5,No known aliases,01/01/????,Capricorn,Russia,Trans woman,,Caucasian,Russian,,Unknown,No data,No data,No data,No data,No data,2,0,0,0,0
|
||||||
|
Maryanne Fisher,https://www.iafd.com/person.rme/id=21898a3c-1ddd-4793-8d93-375d6db20586,No known aliases,01/01/19??,Capricorn,No data,Woman,,Caucasian,No data,,Unknown,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
|
Claude Marcault,https://www.iafd.com/person.rme/id=19971b82-648b-4795-9fd5-a0f7c3ed867f,No known aliases,"January 1, 1941 (would be 84 years old)",Capricorn,India,Woman,,Caucasian,French,,Unknown,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
|
Fernando Arcangeli,https://www.iafd.com/person.rme/id=b32894f5-d15f-40fa-8048-daa6cfa6e480,Ferdinando Arcangeli|Mimì Losy,"January 1, 1942 (83 years old)",Capricorn,"Province of Rome, Italy",Man,1976-1983 (Started around 34 years old),Caucasian,Italian,,Unknown,No data,No data,,No data,No data,0,0,0,0,0
|
||||||
|
Doris Arden,https://www.iafd.com/person.rme/id=585e3afc-9525-48cd-a1d7-9895049c3948,No known aliases,"January 1, 1946 (79 years old)",Capricorn,"Trostberg, Bavaria, Germany",Woman,,Caucasian,German,,Hazel,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
|
Ennio Pontis,https://www.iafd.com/person.rme/id=b2aa39b4-644d-4f61-b088-2ff80ed344b3,No known aliases,"January 1, 1951 (74 years old)",Capricorn,"Rome, Italy",Man,,Caucasian,Italian,,Unknown,No data,No data,,No data,No data,0,0,0,0,0
|
||||||
|
Giorgio Grand,https://www.iafd.com/person.rme/id=150f6ac9-0e5b-4efc-bf2a-5e0f05644f8c,,"January 1, 1954 (71 years old)",Capricorn,"Turin, Italy",Man,,Caucasian,Italian,,Unknown,No data,No data,,No data,No data,0,0,0,0,0
|
||||||
|
Bella Bare,https://www.iafd.com/person.rme/id=3170f526-134b-4fa2-980f-c4d8e58e6e91,Bella Dare (richardmannsworld.com)|Petite Professor|Petite Professor XXX,"January 1, 1971 (54 years old)",Capricorn,"California, USA",Woman,2022-2025 (Started around 51 years old),Caucasian,American,,Green,"5 feet, 0 inches (152 cm)",99 lbs (45 kg),32A-??-??,Heart right bikini line,No data,21,0,0,0,0
|
||||||
|
John Marcus,https://www.iafd.com/person.rme/id=f051b643-ef1e-4297-8c5e-727628aba77e,Jon Marcus,"January 1, 1971 (54 years old)",Capricorn,"Washington State, USA",Man,1996-2013 (Started around 25 years old),Caucasian,American,Grey/Dark Brown,Unknown,"5 feet, 9 inches (175 cm)",165 lbs (75 kg),,None,Ears,3,0,0,0,0
|
||||||
|
Flower,https://www.iafd.com/person.rme/id=c753d420-eb68-46cc-be0a-d3d115972d90,Flower Edwards (softcore),"January 1, 1974 (51 years old)",Capricorn,"Los Angeles, California",Woman,1998-2000 (Started around 24 years old),Asian,American,,Brown,No data,No data,No data,small design on right shoulder; large sun-shaped design on small of back,No data,0,0,0,0,0
|
||||||
|
Gabriele Benedetti,https://www.iafd.com/person.rme/id=2bc92804-cbdb-4f53-802f-bb1ffed85da3,No known aliases,"January 1, 1974 (51 years old)",Capricorn,No data,Man,,Caucasian,No data,,Unknown,"5 feet, 9 inches (175 cm)",No data,,No data,No data,0,0,0,0,0
|
||||||
|
June Kelly,https://www.iafd.com/person.rme/id=4ce5f403-8ed2-4771-9ee6-bed516f5806d,Bessi|Hana|Hana Luv|Julia|June|Kelly June,"January 1, 1974 (51 years old)",Capricorn,Czech Republic,Woman,2006-2012 (Started around 32 years old),Caucasian,Czech,,Blue,"5 feet, 7 inches (170 cm)",94 lbs (43 kg),42HH-47-50,No data,No data,1,0,0,0,0
|
||||||
|
Mikki Taylor,https://www.iafd.com/person.rme/id=bb2238b3-97bf-49eb-ba27-7530a3d62129,No known aliases,"January 1, 1974 (51 years old)",Capricorn,Houston. TX,Woman,1998-2002 (Started around 24 years old),Caucasian,American,,Unknown,"5 feet, 4 inches (163 cm)",125 lbs (57 kg),36C-24-36,No data,No data,2,0,0,0,0
|
||||||
|
Baby,https://www.iafd.com/person.rme/id=9bad19a7-7d35-4003-b63c-b57db61e6241,No known aliases,"January 1, 1975 (50 years old)",Capricorn,No data,Woman,,Caucasian,No data,,Unknown,No data,No data,No data,No data,No data,0,0,0,0,0
|
||||||
|
Ramon Mendez,https://www.iafd.com/person.rme/id=49f92c9a-d780-4e91-868b-7beaefa816dc,Ramon,"January 1, 1976 (49 years old)",Capricorn,Brazil,Man,2004-2007 (Started around 28 years old),Latin,Brazilian,,Unknown,"5 feet, 9 inches (175 cm)",182 lbs (83 kg),,Chili Pepper To The Right Of His Penis,No data,0,0,0,0,0
|
||||||
|
Seranade,https://www.iafd.com/person.rme/id=0f2e8d4a-0e8d-4692-94f2-ff7a9a6bc6c9,No known aliases,"January 1, 1976 (49 years old)",Capricorn,USA,Woman,,Black,American,,Unknown,"5 feet, 11 inches (180 cm)",No data,36D-33-40,None,None,1,0,0,0,0
|
||||||
|
Candy Roxxx,https://www.iafd.com/person.rme/id=9ad5a2d6-a5e0-4e2f-82b4-86316f436a7b,Candy Rocks|Candy Roxx|Randy Roxx,"January 1, 1977 (48 years old)",Capricorn,Minnesota,Woman,1997-2004 (Started around 20 years old),Caucasian,American,Black/Brown/Blond,Unknown,"5 feet, 8 inches (173 cm)",116 lbs (53 kg),36DD-25-35,"Left calf; small flower left of navel; right shoulder blade black panther, with ""Forever Frank's"" in script below; spiral barbed wire above right ankle; armband left upper arm",Clithood; nipples (1999); navel,1,0,0,0,0
|
||||||
|
Kylie Brooks,https://www.iafd.com/person.rme/id=dd3c7b5e-709d-4121-b787-0f1df1e7328e,Alison|Amy (ALS)|Kylie|Ryan,"January 1, 1978 (47 years old)",Capricorn,"Carrollton, KY",Woman,1999-2003 (Started around 21 years old),Caucasian,American,Brown/Blond,Blue,"5 feet, 4 inches (163 cm)",99 lbs (45 kg),35C-24-34,Flower right of navel; Wavy line on lower back; Tinker Bell on left shoulder blade,Navel; Left nipple,0,0,0,0,0
|
||||||
|
Richie Calhoun,https://www.iafd.com/person.rme/id=46c7c922-3789-4277-bf47-ef03df262cfa,Richie|Richie's Brain,"January 1, 1978 (47 years old)",Capricorn,"California, USA",Man,2010-2018 (Started around 32 years old),Caucasian,American,,Unknown,"6 feet, 1 inches (185 cm)",160 lbs (73 kg),,Faint asterisk on right side of lower abdomen (right above groin),None,155,0,0,0,0
|
||||||
|
Brooklyn Bailey,https://www.iafd.com/person.rme/id=7888b8c9-daa2-4655-a7bc-32ae4b00c141,Brooklyn Baily|Valerie Dior,"January 1, 1980 (45 years old)",Capricorn,California,Woman,2009-2012 (Started around 29 years old),Caucasian,American,,Unknown,"5 feet, 3 inches (160 cm)",112 lbs (51 kg),34DD-24-33,No data,No data,15,0,0,0,0
|
||||||
|
Vanessa Luna,https://www.iafd.com/person.rme/id=54ac0d21-b7da-4e0c-b7dc-4e5f1727f77c,No known aliases,"January 1, 1980 (45 years old)",Capricorn,"Caracas, Venezuela",Woman,2013-2018 (Started around 33 years old),Latin,Venezuelan,,Brown,"5 feet, 1 inches (155 cm)",112 lbs (51 kg),34D-27-39,Design across small of back. Design above pubes,No data,15,0,0,0,0
|
||||||
|
Bruna Garcia,https://www.iafd.com/person.rme/id=8242b45f-b2b4-4a84-9d99-40f864e0bc63,No known aliases,"January 1, 1981 (44 years old)",Capricorn,"Silves, Amazonas, Brazil",Trans woman,2005-2006 (Started around 24 years old),Latin,Brazilian,,Unknown,No data,No data,No data,No data,No data,3,0,0,0,0
|
||||||
|
|||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1
scripts/iafd/result/merged.json
Symbolic link
1
scripts/iafd/result/merged.json
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
merged_birth_astro.json
|
||||||
|
Can't render this file because it is too large.
|
139466
scripts/iafd/result/merged_birth_astro.json
Normal file
139466
scripts/iafd/result/merged_birth_astro.json
Normal file
File diff suppressed because it is too large
Load Diff
163999
scripts/iafd/result/merged_birth_astro_ethnic.csv
Normal file
163999
scripts/iafd/result/merged_birth_astro_ethnic.csv
Normal file
File diff suppressed because it is too large
Load Diff
655994
scripts/iafd/result/merged_birth_astro_ethnic.json
Normal file
655994
scripts/iafd/result/merged_birth_astro_ethnic.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user