Automated daily backup: 2026-10-12 03:30
This commit is contained in:
1 parent
824cdedd7e
commit
2b31e92673
949 files changed
+381680
-1825
No files matched your search
+618
-305
File diff suppressed because it is too large.
Load diff
+417
-364
@@ -1,364 +1,417 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
import asyncio
|
import asyncio
|
||||||
import argparse
|
import argparse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
import scraper_core
|
import scraper_core
|
||||||
|
import colorama
|
||||||
|
|
||||||
def _is_filtered(url: str) -> bool:
|
TAG_INFO = getattr(scraper_core, 'TAG_INFO', f"{colorama.Fore.CYAN}[INFO]{colorama.Style.RESET_ALL}")
|
||||||
"""Apply the shared master filter list (lazy import avoids circular deps)."""
|
TAG_WARN = getattr(scraper_core, 'TAG_WARN', f"{colorama.Fore.YELLOW}{colorama.Style.BRIGHT}[WARN]{colorama.Style.RESET_ALL}")
|
||||||
try:
|
TAG_ERROR = getattr(scraper_core, 'TAG_ERROR', f"{colorama.Fore.RED}{colorama.Style.BRIGHT}[ERROR]{colorama.Style.RESET_ALL}")
|
||||||
from downloader import is_filtered
|
|
||||||
except Exception:
|
|
||||||
return False
|
def _g_log_write(msg: str):
|
||||||
return is_filtered(url)
|
scraper_core.clean_write(msg)
|
||||||
|
|
||||||
|
|
||||||
async def get_video_info(scraper, page, url, video_selector, uploader_eval_js=None):
|
def _g_log_info(msg: str, indent: int = 1):
|
||||||
"""Resolve page, extract video source URL, and uploader name."""
|
prefix = " " * indent
|
||||||
await scraper.resolve_page(page, url)
|
scraper_core.clean_write(f"{prefix}{TAG_INFO} {msg}")
|
||||||
|
|
||||||
# Run user uploader evaluation if provided, else generic fallback
|
|
||||||
if uploader_eval_js:
|
def _g_log_warn(msg: str, indent: int = 1):
|
||||||
uploader_raw = await page.evaluate(uploader_eval_js)
|
prefix = " " * indent
|
||||||
else:
|
scraper_core.clean_write(f"{prefix}{TAG_WARN} {msg}")
|
||||||
uploader_raw = await page.evaluate("""() => {
|
|
||||||
const selectors = [
|
|
||||||
'.uploader', '.author', '.user-name',
|
def _g_log_error(msg: str, indent: int = 1):
|
||||||
'a[href*="/members/"]', 'a[href*="/user/"]',
|
prefix = " " * indent
|
||||||
'.video-metadata a[href*="/profile/"]'
|
scraper_core.clean_write(f"{prefix}{TAG_ERROR} {msg}")
|
||||||
];
|
|
||||||
for (const s of selectors) {
|
|
||||||
const el = document.querySelector(s);
|
def _is_filtered(url: str) -> bool:
|
||||||
if (el && el.innerText.trim()) return el.innerText.trim();
|
"""Apply the shared master filter list (lazy import avoids circular deps)."""
|
||||||
}
|
try:
|
||||||
return 'unknown';
|
from downloader import is_filtered
|
||||||
}""")
|
return is_filtered(url)
|
||||||
|
except Exception:
|
||||||
uploader = scraper_core.clean_filename(uploader_raw) if uploader_raw else "unknown"
|
return False
|
||||||
|
|
||||||
# Try core video src extraction first (intercepts player network requests)
|
|
||||||
src = await scraper.extract_media_source(page, url, video_selector)
|
async def get_video_info(scraper, page, url, video_selector, uploader_eval_js=None):
|
||||||
return src, uploader
|
"""Resolve page, extract video source URL, and uploader name."""
|
||||||
|
await scraper.resolve_page(page, url)
|
||||||
|
|
||||||
async def scrape_playlist(page, playlist_url: str, is_video_link_fn, next_page_selector):
|
# Run user uploader evaluation if provided, else generic fallback
|
||||||
"""Scrape all video URLs from a playlist/user profile, following pagination."""
|
if uploader_eval_js:
|
||||||
base = playlist_url.rstrip("/")
|
uploader_raw = await page.evaluate(uploader_eval_js)
|
||||||
all_video_urls = []
|
else:
|
||||||
page_num = 1
|
uploader_raw = await page.evaluate("""() => {
|
||||||
seen = set()
|
const selectors = [
|
||||||
|
'.uploader', '.author', '.user-name',
|
||||||
while True:
|
'a[href*="/members/"]', 'a[href*="/user/"]',
|
||||||
# Navigate or click to pagination
|
'.video-metadata a[href*="/profile/"]'
|
||||||
if page_num > 1:
|
];
|
||||||
clicked = False
|
for (const s of selectors) {
|
||||||
try:
|
const el = document.querySelector(s);
|
||||||
# Find the button/link matching the target page_num exactly
|
if (el && el.innerText.trim()) return el.innerText.trim();
|
||||||
btn_info = await page.evaluate(f"""(pageNum) => {{
|
}
|
||||||
const btn = Array.from(document.querySelectorAll('button, a'))
|
return 'unknown';
|
||||||
.find(b => b.innerText.trim() === String(pageNum));
|
}""")
|
||||||
if (btn) {{
|
|
||||||
return {{
|
uploader = scraper_core.clean_filename(uploader_raw) if uploader_raw else "unknown"
|
||||||
found: true,
|
|
||||||
href: btn.href || null
|
# Try core video src extraction first (intercepts player network requests)
|
||||||
}};
|
src = await scraper.extract_media_source(page, url, video_selector)
|
||||||
}}
|
return src, uploader
|
||||||
return {{ found: false }};
|
|
||||||
}}""", page_num)
|
|
||||||
|
async def scrape_playlist(page, playlist_url: str, is_video_link_fn, next_page_selector):
|
||||||
if btn_info.get("found"):
|
"""Scrape all video URLs from a playlist/user profile, following pagination."""
|
||||||
href = btn_info.get("href")
|
base = playlist_url.rstrip("/")
|
||||||
if href and href.startswith("http"):
|
all_video_urls = []
|
||||||
tqdm.write(f"Scraping page {page_num} via direct href navigation: {href}")
|
page_num = 1
|
||||||
await page.goto(href, wait_until="domcontentloaded", timeout=30000)
|
seen = set()
|
||||||
await page.wait_for_timeout(3000)
|
|
||||||
clicked = True
|
while True:
|
||||||
else:
|
# Navigate or click to pagination
|
||||||
clicked = await page.evaluate(f"""(pageNum) => {{
|
if page_num > 1:
|
||||||
const btn = Array.from(document.querySelectorAll('button, a'))
|
clicked = False
|
||||||
.find(b => b.innerText.trim() === String(pageNum));
|
try:
|
||||||
if (btn) {{
|
# Find the button/link matching the target page_num exactly
|
||||||
btn.click();
|
btn_info = await page.evaluate(f"""(pageNum) => {{
|
||||||
return true;
|
const btn = Array.from(document.querySelectorAll('button, a'))
|
||||||
}}
|
.find(b => b.innerText.trim() === String(pageNum));
|
||||||
return false;
|
if (btn) {{
|
||||||
}}""", page_num)
|
return {{
|
||||||
if clicked:
|
found: true,
|
||||||
tqdm.write(f"Scraping page {page_num} via client-side pagination click...")
|
href: btn.href || null
|
||||||
await page.wait_for_timeout(3000)
|
}};
|
||||||
except Exception as e:
|
}}
|
||||||
tqdm.write(f" Failed client-side click/navigation: {e}")
|
return {{ found: false }};
|
||||||
|
}}""", page_num)
|
||||||
if not clicked:
|
|
||||||
# Fall back to URL navigation
|
if btn_info.get("found"):
|
||||||
if "?" in base:
|
href = btn_info.get("href")
|
||||||
url = f"{base}&page={page_num}"
|
if href and href.startswith("http"):
|
||||||
else:
|
tqdm.write(f"Scraping page {page_num} via direct href navigation: {href}")
|
||||||
url = f"{base}/page/{page_num}/" if "/" in base else f"{base}?page={page_num}"
|
await page.goto(href, wait_until="domcontentloaded", timeout=30000)
|
||||||
tqdm.write(f"Scraping page {page_num} via URL navigation: {url}")
|
await page.wait_for_timeout(3000)
|
||||||
try:
|
clicked = True
|
||||||
await page.goto(url, wait_until="domcontentloaded", timeout=30000)
|
else:
|
||||||
await page.wait_for_timeout(2000)
|
clicked = await page.evaluate(f"""(pageNum) => {{
|
||||||
except Exception as e:
|
const btn = Array.from(document.querySelectorAll('button, a'))
|
||||||
tqdm.write(f" Error loading page {page_num}: {e}")
|
.find(b => b.innerText.trim() === String(pageNum));
|
||||||
break
|
if (btn) {{
|
||||||
else:
|
btn.click();
|
||||||
tqdm.write(f"Scraping page {page_num}: {base}")
|
return true;
|
||||||
try:
|
}}
|
||||||
await page.goto(base, wait_until="domcontentloaded", timeout=30000)
|
return false;
|
||||||
await page.wait_for_timeout(2000)
|
}}""", page_num)
|
||||||
except Exception as e:
|
if clicked:
|
||||||
tqdm.write(f" Error loading page {page_num}: {e}")
|
tqdm.write(f"Scraping page {page_num} via client-side pagination click...")
|
||||||
break
|
await page.wait_for_timeout(3000)
|
||||||
|
except Exception as e:
|
||||||
# Extract all link tags and JSON-LD URLs
|
tqdm.write(f" Failed client-side click/navigation: {e}")
|
||||||
links = await page.evaluate("""() => {
|
|
||||||
const urls = Array.from(document.querySelectorAll('a')).map(el => el.href);
|
if not clicked:
|
||||||
const scripts = document.querySelectorAll('script[type="application/ld+json"]');
|
# Fall back to URL navigation
|
||||||
for (const s of scripts) {
|
if "?" in base:
|
||||||
try {
|
url = f"{base}&page={page_num}"
|
||||||
const data = JSON.parse(s.innerText);
|
else:
|
||||||
if (data['@type'] === 'ItemList' && data.itemListElement) {
|
url = f"{base}/page/{page_num}/" if "/" in base else f"{base}?page={page_num}"
|
||||||
for (const element of data.itemListElement) {
|
_g_log_info(f"Scraping page {page_num} via URL navigation: {url}", indent=1)
|
||||||
const item = element.item;
|
try:
|
||||||
if (item) {
|
await page.goto(url, wait_until="domcontentloaded", timeout=30000)
|
||||||
if (item.embedUrl) urls.push(item.embedUrl);
|
await page.wait_for_timeout(2000)
|
||||||
if (item.url) urls.push(item.url);
|
except Exception as e:
|
||||||
}
|
_g_log_error(f"Error loading page {page_num}: {e}", indent=2)
|
||||||
}
|
break
|
||||||
}
|
else:
|
||||||
} catch (e) {}
|
_g_log_info(f"Scraping page {page_num}: {base}", indent=1)
|
||||||
}
|
try:
|
||||||
return urls;
|
await page.goto(base, wait_until="domcontentloaded", timeout=30000)
|
||||||
}""")
|
await page.wait_for_timeout(2000)
|
||||||
|
except Exception as e:
|
||||||
unique_page_urls = []
|
_g_log_error(f"Error loading page {page_num}: {e}", indent=2)
|
||||||
for l in links:
|
break
|
||||||
if l in seen or not is_video_link_fn(l):
|
|
||||||
continue
|
# Extract all link tags and JSON-LD URLs
|
||||||
if _is_filtered(l):
|
links = await page.evaluate("""() => {
|
||||||
tqdm.write(f" x Filtered: {l}")
|
const urls = Array.from(document.querySelectorAll('a')).map(el => el.href);
|
||||||
continue
|
const scripts = document.querySelectorAll('script[type="application/ld+json"]');
|
||||||
seen.add(l)
|
for (const s of scripts) {
|
||||||
unique_page_urls.append(l)
|
try {
|
||||||
|
const data = JSON.parse(s.innerText);
|
||||||
if not unique_page_urls:
|
if (data['@type'] === 'ItemList' && data.itemListElement) {
|
||||||
tqdm.write(" No new video links found on page.")
|
for (const element of data.itemListElement) {
|
||||||
break
|
const item = element.item;
|
||||||
|
if (item) {
|
||||||
tqdm.write(f" Found {len(unique_page_urls)} video links")
|
if (item.embedUrl) urls.push(item.embedUrl);
|
||||||
all_video_urls.extend(unique_page_urls)
|
if (item.url) urls.push(item.url);
|
||||||
|
}
|
||||||
# Check for next page availability
|
}
|
||||||
has_next = False
|
}
|
||||||
if next_page_selector:
|
} catch (e) {}
|
||||||
next_button = await page.query_selector(next_page_selector)
|
}
|
||||||
if next_button:
|
return urls;
|
||||||
has_next = True
|
}""")
|
||||||
|
|
||||||
if not has_next:
|
unique_page_urls = []
|
||||||
# Check for client-side pagination numerical button matching page_num + 1
|
for l in links:
|
||||||
has_next = await page.evaluate(f"""(nextPage) => {{
|
if l in seen or not is_video_link_fn(l):
|
||||||
return Array.from(document.querySelectorAll('button, a'))
|
continue
|
||||||
.some(b => b.innerText.trim() === String(nextPage));
|
if _is_filtered(l):
|
||||||
}}""", page_num + 1)
|
try:
|
||||||
|
from downloader import log_filtered
|
||||||
if not has_next:
|
log_filtered(l, indent=2)
|
||||||
# Check if there is any pagination link for next page in extracted links
|
except Exception:
|
||||||
next_page_str = f"page={page_num + 1}"
|
_g_log_info(f"Filtered: {l}", indent=2)
|
||||||
next_page_str_alt = f"/page/{page_num + 1}"
|
continue
|
||||||
has_next = any((next_page_str in l or next_page_str_alt in l) for l in links)
|
seen.add(l)
|
||||||
|
unique_page_urls.append(l)
|
||||||
if not has_next:
|
|
||||||
tqdm.write(" No next page button or link found, done.")
|
if not unique_page_urls:
|
||||||
break
|
_g_log_info("No new video links found on page.", indent=2)
|
||||||
|
break
|
||||||
page_num += 1
|
|
||||||
|
_g_log_info(f"Found {len(unique_page_urls)} video links", indent=2)
|
||||||
return all_video_urls
|
all_video_urls.extend(unique_page_urls)
|
||||||
|
|
||||||
|
# Check for next page availability
|
||||||
async def worker(queue, scraper, download_dir, skip_existing, bar_pool, overall_bar, video_selector, uploader_eval_js):
|
has_next = False
|
||||||
"""Worker task that handles resolving video URL and downloading."""
|
if next_page_selector:
|
||||||
while True:
|
next_button = await page.query_selector(next_page_selector)
|
||||||
url = await queue.get()
|
if next_button:
|
||||||
if url is None:
|
has_next = True
|
||||||
queue.task_done()
|
|
||||||
break
|
if not has_next:
|
||||||
|
# Check for client-side pagination numerical button matching page_num + 1
|
||||||
try:
|
has_next = await page.evaluate(f"""(nextPage) => {{
|
||||||
if _is_filtered(url):
|
return Array.from(document.querySelectorAll('button, a'))
|
||||||
tqdm.write(f" x Filtered: {url}")
|
.some(b => b.innerText.trim() === String(nextPage));
|
||||||
continue
|
}}""", page_num + 1)
|
||||||
page = await scraper.new_page()
|
|
||||||
src, uploader = await get_video_info(scraper, page, url, video_selector, uploader_eval_js)
|
if not has_next:
|
||||||
await page.close()
|
# Check if there is any pagination link for next page in extracted links
|
||||||
|
next_page_str = f"page={page_num + 1}"
|
||||||
if not src:
|
next_page_str_alt = f"/page/{page_num + 1}"
|
||||||
tqdm.write(f" [ERROR] Skipping {url} - no video source found")
|
has_next = any((next_page_str in l or next_page_str_alt in l) for l in links)
|
||||||
continue
|
|
||||||
|
if not has_next:
|
||||||
# Create a clean filename from URL path
|
_g_log_info("No next page button or link found, done.", indent=2)
|
||||||
parsed = urlparse(url)
|
break
|
||||||
stem = parsed.path.rstrip("/").split("/")[-1]
|
|
||||||
if not stem or stem == "video" or stem.isdigit():
|
page_num += 1
|
||||||
stem = parsed.path.rstrip("/").split("/")[-2] + "_" + stem
|
|
||||||
filename = scraper_core.clean_filename(stem) + ".mp4"
|
return all_video_urls
|
||||||
dest_path = download_dir / uploader / filename
|
|
||||||
|
|
||||||
downloaded_bytes = 0
|
async def worker(queue, scraper, download_dir, skip_existing, bar_pool, overall_bar, video_selector, uploader_eval_js):
|
||||||
if skip_existing:
|
"""Worker task that handles resolving video URL and downloading."""
|
||||||
from downloader import check_existing_file
|
while True:
|
||||||
is_complete, existing_bytes = await check_existing_file(dest_path, src, {"Referer": url})
|
url = await queue.get()
|
||||||
if is_complete:
|
if url is None:
|
||||||
if hasattr(overall_bar, "record_skip"):
|
queue.task_done()
|
||||||
overall_bar.record_skip(existing_bytes)
|
break
|
||||||
else:
|
|
||||||
overall_bar.update(1)
|
try:
|
||||||
continue
|
if _is_filtered(url):
|
||||||
|
try:
|
||||||
pos = bar_pool.acquire() or 4
|
from downloader import log_filtered
|
||||||
|
log_filtered(url, indent=2)
|
||||||
# Download concurrently in a thread
|
except Exception:
|
||||||
success = await asyncio.to_thread(
|
tqdm.write(f" x Filtered: {url}")
|
||||||
scraper_core.download_file,
|
continue
|
||||||
src, dest_path, None, pos, url
|
|
||||||
)
|
try:
|
||||||
|
from downloader import log_processing
|
||||||
bar_pool.release(pos)
|
log_processing(url, indent=1)
|
||||||
|
except Exception:
|
||||||
if success:
|
pass
|
||||||
if dest_path.is_file():
|
|
||||||
downloaded_bytes = dest_path.stat().st_size
|
page = await scraper.new_page()
|
||||||
label = f"{dest_path.parent.name}/{dest_path.name}"
|
src, uploader = await get_video_info(scraper, page, url, video_selector, uploader_eval_js)
|
||||||
if hasattr(overall_bar, "record_download"):
|
await page.close()
|
||||||
overall_bar.record_download(downloaded_bytes, name=label)
|
|
||||||
else:
|
if not src:
|
||||||
overall_bar.update(1)
|
try:
|
||||||
scraper_core.append_log(download_dir / "urls.txt", url)
|
from downloader import log_warn
|
||||||
scraper_core.append_log(download_dir / uploader / "urls.txt", url)
|
log_warn(f"Skipping {url} - no video source found", indent=2)
|
||||||
else:
|
except Exception:
|
||||||
overall_bar.update(1)
|
_g_log_warn(f"Skipping {url} - no video source found", indent=2)
|
||||||
|
continue
|
||||||
except Exception as e:
|
|
||||||
tqdm.write(f" Error processing {url}: {e}")
|
# Create a clean filename from URL path
|
||||||
overall_bar.update(1)
|
parsed = urlparse(url)
|
||||||
finally:
|
stem = parsed.path.rstrip("/").split("/")[-1]
|
||||||
queue.task_done()
|
if not stem or stem == "video" or stem.isdigit():
|
||||||
|
stem = parsed.path.rstrip("/").split("/")[-2] + "_" + stem
|
||||||
|
filename = scraper_core.clean_filename(stem) + ".mp4"
|
||||||
async def process_urls(site_name, urls, download_dir, is_video_link_fn, next_page_selector, video_selector, uploader_eval_js, concurrency, skip_existing):
|
dest_path = download_dir / uploader / filename
|
||||||
scraper = scraper_core.PlaywrightScraper()
|
try:
|
||||||
await scraper.start()
|
from downloader import log_processing_file
|
||||||
|
log_processing_file(f"{uploader}/{filename}", indent=2)
|
||||||
# Resolve playlists first if any target is a playlist
|
except Exception:
|
||||||
playlist_page = await scraper.new_page()
|
pass
|
||||||
all_urls = []
|
|
||||||
for url in urls:
|
downloaded_bytes = 0
|
||||||
if is_video_link_fn(url):
|
if skip_existing:
|
||||||
if _is_filtered(url):
|
from downloader import check_existing_file
|
||||||
tqdm.write(f" x Filtered (not queued): {url}")
|
is_complete, existing_bytes = await check_existing_file(dest_path, src, {"Referer": url})
|
||||||
continue
|
if is_complete:
|
||||||
all_urls.append(url)
|
if hasattr(overall_bar, "record_skip"):
|
||||||
else:
|
overall_bar.record_skip(existing_bytes)
|
||||||
playlist_urls = await scrape_playlist(playlist_page, url, is_video_link_fn, next_page_selector)
|
else:
|
||||||
all_urls.extend(playlist_urls)
|
overall_bar.update(1)
|
||||||
await playlist_page.close()
|
continue
|
||||||
|
|
||||||
if not all_urls:
|
pos = bar_pool.acquire() or 4
|
||||||
tqdm.write("No video URLs found to process.")
|
|
||||||
await scraper.close()
|
# Download concurrently in a thread
|
||||||
return
|
success = await asyncio.to_thread(
|
||||||
|
scraper_core.download_file,
|
||||||
tqdm.write(f"[{site_name}] Processing {len(all_urls)} videos with concurrency {concurrency} ...")
|
src, dest_path, None, pos, url
|
||||||
|
)
|
||||||
# Queue setup
|
|
||||||
queue = asyncio.Queue()
|
bar_pool.release(pos)
|
||||||
for url in all_urls:
|
|
||||||
await queue.put(url)
|
if success:
|
||||||
for _ in range(concurrency):
|
if dest_path.is_file():
|
||||||
await queue.put(None)
|
downloaded_bytes = dest_path.stat().st_size
|
||||||
|
label = f"{dest_path.parent.name}/{dest_path.name}"
|
||||||
bar_pool = scraper_core.BarPositionPool(concurrency)
|
if hasattr(overall_bar, "record_download"):
|
||||||
bar_pool.available = [p + 3 for p in bar_pool.available]
|
overall_bar.record_download(downloaded_bytes, name=label)
|
||||||
|
else:
|
||||||
try:
|
overall_bar.update(1)
|
||||||
from downloader import OverallProgressTracker
|
scraper_core.append_log(download_dir / "urls.txt", url)
|
||||||
overall_bar = OverallProgressTracker(
|
scraper_core.append_log(download_dir / uploader / "urls.txt", url)
|
||||||
total=len(all_urls),
|
else:
|
||||||
desc=f"[{site_name}] Overall",
|
overall_bar.update(1)
|
||||||
)
|
|
||||||
except Exception:
|
except Exception as e:
|
||||||
overall_bar = tqdm(
|
_g_log_error(f"Error processing {url}: {e}", indent=1)
|
||||||
total=len(all_urls),
|
overall_bar.update(1)
|
||||||
desc=f"[{site_name}] Overall",
|
finally:
|
||||||
position=2,
|
queue.task_done()
|
||||||
leave=True,
|
|
||||||
ncols=80,
|
|
||||||
)
|
async def process_urls(site_name, urls, download_dir, is_video_link_fn, next_page_selector, video_selector, uploader_eval_js, concurrency, skip_existing):
|
||||||
|
scraper = scraper_core.PlaywrightScraper()
|
||||||
workers = [
|
await scraper.start()
|
||||||
asyncio.create_task(worker(queue, scraper, download_dir, skip_existing, bar_pool, overall_bar, video_selector, uploader_eval_js))
|
|
||||||
for _ in range(concurrency)
|
# Resolve playlists first if any target is a playlist
|
||||||
]
|
playlist_page = await scraper.new_page()
|
||||||
|
all_urls = []
|
||||||
await asyncio.gather(*workers)
|
for url in urls:
|
||||||
overall_bar.close()
|
if is_video_link_fn(url):
|
||||||
|
if _is_filtered(url):
|
||||||
# Clear terminal lines
|
try:
|
||||||
sys.stdout.write("\n" * (concurrency + 4))
|
from downloader import log_filtered
|
||||||
sys.stdout.flush()
|
log_filtered(url, not_queued=True, indent=2)
|
||||||
|
except Exception:
|
||||||
await scraper.close()
|
_g_log_info(f"Filtered (not queued): {url}", indent=2)
|
||||||
|
continue
|
||||||
|
all_urls.append(url)
|
||||||
def run(site_name, is_video_link_fn, next_page_selector, video_selector="video", uploader_eval_js=None, default_playlist=""):
|
else:
|
||||||
parser = argparse.ArgumentParser(
|
playlist_urls = await scrape_playlist(playlist_page, url, is_video_link_fn, next_page_selector)
|
||||||
description=f"Download videos from {site_name} (headless, concurrent, multithreaded)."
|
all_urls.extend(playlist_urls)
|
||||||
)
|
await playlist_page.close()
|
||||||
parser.add_argument(
|
|
||||||
"urls",
|
if not all_urls:
|
||||||
nargs="*",
|
_g_log_info("No video URLs found to process.", indent=1)
|
||||||
help="Playlist or individual video URLs.",
|
await scraper.close()
|
||||||
)
|
return
|
||||||
parser.add_argument(
|
|
||||||
"--concurrency",
|
_g_log_info(f"[{site_name}] Processing {len(all_urls)} videos with concurrency {concurrency} ...", indent=1)
|
||||||
type=int,
|
|
||||||
default=3,
|
# Queue setup
|
||||||
help="Number of concurrent downloads (default: 3).",
|
queue = asyncio.Queue()
|
||||||
)
|
for url in all_urls:
|
||||||
parser.add_argument(
|
await queue.put(url)
|
||||||
"--skip-existing",
|
for _ in range(concurrency):
|
||||||
action="store_true",
|
await queue.put(None)
|
||||||
default=True,
|
|
||||||
help="Skip already-downloaded files (default: true).",
|
bar_pool = scraper_core.BarPositionPool(concurrency)
|
||||||
)
|
bar_pool.available = [p + 3 for p in bar_pool.available]
|
||||||
parser.add_argument(
|
|
||||||
"--no-skip-existing",
|
try:
|
||||||
action="store_false",
|
from downloader import OverallProgressTracker
|
||||||
dest="skip_existing",
|
overall_bar = OverallProgressTracker(
|
||||||
help="Re-download existing files.",
|
total=len(all_urls),
|
||||||
)
|
desc=f"[{site_name}] Overall",
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
except Exception:
|
||||||
|
overall_bar = tqdm(
|
||||||
targets = args.urls
|
total=len(all_urls),
|
||||||
if not targets:
|
desc=f"[{site_name}] Overall",
|
||||||
if default_playlist:
|
position=2,
|
||||||
targets = [default_playlist]
|
leave=True,
|
||||||
else:
|
dynamic_ncols=True,
|
||||||
sys.exit("Error: No URLs provided.")
|
colour="cyan",
|
||||||
|
)
|
||||||
download_dir = Path(sys.argv[0]).resolve().parent / "videos"
|
|
||||||
asyncio.run(process_urls(
|
workers = [
|
||||||
site_name, targets, download_dir,
|
asyncio.create_task(worker(queue, scraper, download_dir, skip_existing, bar_pool, overall_bar, video_selector, uploader_eval_js))
|
||||||
is_video_link_fn, next_page_selector,
|
for _ in range(concurrency)
|
||||||
video_selector, uploader_eval_js,
|
]
|
||||||
args.concurrency, args.skip_existing
|
|
||||||
))
|
await asyncio.gather(*workers)
|
||||||
|
overall_bar.close()
|
||||||
|
|
||||||
|
# Clear terminal lines
|
||||||
|
sys.stdout.write("\n" * (concurrency + 4))
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
await scraper.close()
|
||||||
|
|
||||||
|
|
||||||
|
def run(site_name, is_video_link_fn, next_page_selector, video_selector="video", uploader_eval_js=None, default_playlist=""):
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description=f"Download videos from {site_name} (headless, concurrent, multithreaded)."
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"urls",
|
||||||
|
nargs="*",
|
||||||
|
help="Playlist or individual video URLs.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--concurrency",
|
||||||
|
type=int,
|
||||||
|
default=3,
|
||||||
|
help="Number of concurrent downloads (default: 3).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--skip-existing",
|
||||||
|
action="store_true",
|
||||||
|
default=True,
|
||||||
|
help="Skip already-downloaded files (default: true).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--no-skip-existing",
|
||||||
|
action="store_false",
|
||||||
|
dest="skip_existing",
|
||||||
|
help="Re-download existing files.",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
targets = args.urls
|
||||||
|
if not targets:
|
||||||
|
if default_playlist:
|
||||||
|
targets = [default_playlist]
|
||||||
|
else:
|
||||||
|
sys.exit("Error: No URLs provided.")
|
||||||
|
|
||||||
|
download_dir = Path(sys.argv[0]).resolve().parent / "videos"
|
||||||
|
asyncio.run(process_urls(
|
||||||
|
site_name, targets, download_dir,
|
||||||
|
is_video_link_fn, next_page_selector,
|
||||||
|
video_selector, uploader_eval_js,
|
||||||
|
args.concurrency, args.skip_existing
|
||||||
|
))
|
||||||
@@ -26,7 +26,9 @@ async def get_cloudflare_cookies(scraper, url):
|
|||||||
try:
|
try:
|
||||||
await scraper.resolve_page(page, url)
|
await scraper.resolve_page(page, url)
|
||||||
raw_cookies = await scraper.context.cookies()
|
raw_cookies = await scraper.context.cookies()
|
||||||
return {c["name"]: c["value"] for c in raw_cookies}
|
# Filter out cf_clearance because curl_cffi's TLS fingerprint does not match
|
||||||
|
# the Playwright instance that solved the challenge, causing Cloudflare 403s.
|
||||||
|
return {c["name"]: c["value"] for c in raw_cookies if c["name"] != "cf_clearance"}
|
||||||
finally:
|
finally:
|
||||||
await page.close()
|
await page.close()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/bottom-femboy-getting-his-ass-wrecked-508778.html
|
||||||
@@ -3,3 +3,5 @@ https://en.luxuretv.com/videos/a----a----a----a----a-----a----a-----a-----a----a
|
|||||||
https://en.luxuretv.com/videos/a----a----a----a----a-----a----a-----a-----a----a----a----a----a----a-----ployzaii-rsw-1-185093.html
|
https://en.luxuretv.com/videos/a----a----a----a----a-----a----a-----a-----a----a----a----a----a----a-----ployzaii-rsw-1-185093.html
|
||||||
https://en.luxuretv.com/videos/a----a----a----a----a-----a-----a----a----a----a-----a----a----a-----a----a----a----a-----a----a----a----a----a-----212431.html
|
https://en.luxuretv.com/videos/a----a----a----a----a-----a-----a----a----a----a-----a----a----a-----a----a----a----a-----a----a----a----a----a-----212431.html
|
||||||
https://en.luxuretv.com/videos/tee-a----a----a-----a-----a----a----a----a----a----a----a------6-212440.html
|
https://en.luxuretv.com/videos/tee-a----a----a-----a-----a----a----a----a----a----a----a------6-212440.html
|
||||||
|
https://en.luxuretv.com/videos/tee-a----a----a-----a-----a----a----a----a----a----a----a------4-212438.html
|
||||||
|
https://en.luxuretv.com/videos/tee-a----a----a-----a-----a----a----a----a----a----a----a------3-212437.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/k9-getting-sucked-off-good-177704.html
|
||||||
@@ -2,3 +2,4 @@ https://en.luxuretv.com/videos/chinese-black-dog-fuck-his-woman-329304.html
|
|||||||
https://en.luxuretv.com/videos/chinese-beauty-love-fucking-outside-330320.html
|
https://en.luxuretv.com/videos/chinese-beauty-love-fucking-outside-330320.html
|
||||||
https://en.luxuretv.com/videos/chinese-girl-love-play-with-dog-322166.html
|
https://en.luxuretv.com/videos/chinese-girl-love-play-with-dog-322166.html
|
||||||
https://en.luxuretv.com/videos/chinese-wife-have-a-good-try-323417.html
|
https://en.luxuretv.com/videos/chinese-wife-have-a-good-try-323417.html
|
||||||
|
https://en.luxuretv.com/videos/chinese-three-dog-take-turns-332324.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/real-daughter-forced-and-abused-507773.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/fantasy-18--role-play--mommy-waiting-in-the-sch00l-pickup-line-gooning--ap-rp-audio-18--445451.html
|
https://en.luxuretv.com/videos/fantasy-18--role-play--mommy-waiting-in-the-sch00l-pickup-line-gooning--ap-rp-audio-18--445451.html
|
||||||
|
https://en.luxuretv.com/videos/pt-2-salt-and-pepper-345116.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/long-island-slut-christina-macfarlane-51373.html
|
||||||
@@ -2,3 +2,4 @@ https://en.luxuretv.com/videos/ifykyk--3-465347.html
|
|||||||
https://en.luxuretv.com/videos/fucking-my-pretty-pussy-298720.html
|
https://en.luxuretv.com/videos/fucking-my-pretty-pussy-298720.html
|
||||||
https://en.luxuretv.com/videos/i-need-someone-to-goon-together-to-such-vids-and-more--hmu-294656.html
|
https://en.luxuretv.com/videos/i-need-someone-to-goon-together-to-such-vids-and-more--hmu-294656.html
|
||||||
https://en.luxuretv.com/videos/sucking-dildo-298721.html
|
https://en.luxuretv.com/videos/sucking-dildo-298721.html
|
||||||
|
https://en.luxuretv.com/videos/bbc-anal-destruction-405393.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/thick-bbc-side-fuck-471352.html
|
||||||
@@ -1 +1,5 @@
|
|||||||
https://en.luxuretv.com/videos/blowjob-and-swallow-for-the-pizza-delivery-guy-377486.html
|
https://en.luxuretv.com/videos/blowjob-and-swallow-for-the-pizza-delivery-guy-377486.html
|
||||||
|
https://en.luxuretv.com/videos/redhead-with-tattoos-interracial-blowjob-483583.html
|
||||||
|
https://en.luxuretv.com/videos/hot-mexican-escort-takes-massive-bbc-creampie-in-hotel-420828.html
|
||||||
|
https://en.luxuretv.com/videos/street-whore-sucks-an-indian-cock-320098.html
|
||||||
|
https://en.luxuretv.com/videos/blowjob-and-creampie-in-car-326691.html
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
https://en.luxuretv.com/videos/cumming-to-forbidden-vids-303606.html
|
https://en.luxuretv.com/videos/cumming-to-forbidden-vids-303606.html
|
||||||
https://en.luxuretv.com/videos/soaked-for-forbidden-314033.html
|
https://en.luxuretv.com/videos/soaked-for-forbidden-314033.html
|
||||||
|
https://en.luxuretv.com/videos/cumming-to-bad-mom-touching-daughter-pussy-309080.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/incest-trans-sluts-daughter-454101.html
|
||||||
|
https://en.luxuretv.com/videos/nasty-daughters-452486.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/free-use-in-the-streets-276661.html
|
https://en.luxuretv.com/videos/free-use-in-the-streets-276661.html
|
||||||
|
https://en.luxuretv.com/videos/i-need-to-be-hurt-like-this-393565.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/tranny-bbc-473240.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/addicted-to-big-black-cocks-370992.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/unwanted-blowjob-175318.html
|
||||||
|
https://en.luxuretv.com/videos/ass-in-tight-jeans-175966.html
|
||||||
@@ -65,3 +65,7 @@ https://en.luxuretv.com/videos/--animal-xxx--dog-porn---massive-brindle-dog-moun
|
|||||||
https://en.luxuretv.com/videos/beastiality-compilation-of-girls-getting-drilled-by-2-foot-long-horse-cocks-on-the-farm-69504.html
|
https://en.luxuretv.com/videos/beastiality-compilation-of-girls-getting-drilled-by-2-foot-long-horse-cocks-on-the-farm-69504.html
|
||||||
https://en.luxuretv.com/videos/cute-young-k9-slut-jerking-off-and-sucking-her-happy-black-dog-until-he-cums-69377.html
|
https://en.luxuretv.com/videos/cute-young-k9-slut-jerking-off-and-sucking-her-happy-black-dog-until-he-cums-69377.html
|
||||||
https://en.luxuretv.com/videos/--zoophilia-milf-porn---mommy-loves-it-when-her-cute-black-dog-licks-her-out-before-fucking-her-69532.html
|
https://en.luxuretv.com/videos/--zoophilia-milf-porn---mommy-loves-it-when-her-cute-black-dog-licks-her-out-before-fucking-her-69532.html
|
||||||
|
https://en.luxuretv.com/videos/naked-college-aged-slut-lays-on-her-back-as-her-dude-empties-cumshot-onto-her-pretty-face-59452.html
|
||||||
|
https://en.luxuretv.com/videos/jizz-friendly-eighteen-year-old-fresh-faced-skank-gets-a-forehead-full-of-warm-cum-in-this-video-59445.html
|
||||||
|
https://en.luxuretv.com/videos/black-dude-with-a-giant-cock-relaxes-while-cum-hungry-white-young-slut-pleasures-him-right-59419.html
|
||||||
|
https://en.luxuretv.com/videos/kinky-cartoon-girl-plays-with-this-horses-cock-before-guiding-it-to-her-cunt-69499.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/eating-my-cum-301174.html
|
||||||
@@ -2,3 +2,4 @@ https://en.luxuretv.com/videos/what-an-awesome-sister-----312437.html
|
|||||||
https://en.luxuretv.com/videos/teen-has-sex-with-family-dog-331557.html
|
https://en.luxuretv.com/videos/teen-has-sex-with-family-dog-331557.html
|
||||||
https://en.luxuretv.com/videos/best-video-ive-ever-found-261588.html
|
https://en.luxuretv.com/videos/best-video-ive-ever-found-261588.html
|
||||||
https://en.luxuretv.com/videos/fucked-my-cousin-in-the-ass-313333.html
|
https://en.luxuretv.com/videos/fucked-my-cousin-in-the-ass-313333.html
|
||||||
|
https://en.luxuretv.com/videos/--i-m-going-to-cum-on-that-dick-----346749.html
|
||||||
@@ -35,3 +35,5 @@ https://en.luxuretv.com/videos/hottie-wants-to-fuck-9026.html
|
|||||||
https://en.luxuretv.com/videos/horse-fucks-man-at-the-farm-8747.html
|
https://en.luxuretv.com/videos/horse-fucks-man-at-the-farm-8747.html
|
||||||
https://en.luxuretv.com/videos/amateurs-fuck-in-several-positions-9452.html
|
https://en.luxuretv.com/videos/amateurs-fuck-in-several-positions-9452.html
|
||||||
https://en.luxuretv.com/videos/plump-amateur-brunette-whore-moans-in-pleasure-while-her-girlfriend-licks-her-juicy-snatch-63774.html
|
https://en.luxuretv.com/videos/plump-amateur-brunette-whore-moans-in-pleasure-while-her-girlfriend-licks-her-juicy-snatch-63774.html
|
||||||
|
https://en.luxuretv.com/videos/anal-sex-with-shemales-9844.html
|
||||||
|
https://en.luxuretv.com/videos/she-fucks-with-her-big-shiny-black-cock-9945.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/late-night-ebony-bbc-jerking-out-a-huge-nut-241811.html
|
https://en.luxuretv.com/videos/late-night-ebony-bbc-jerking-out-a-huge-nut-241811.html
|
||||||
|
https://en.luxuretv.com/videos/for-all-asshole-lovers-243764.html
|
||||||
@@ -154,3 +154,59 @@ https://en.luxuretv.com/videos/go-big-or-go-home-332262.html
|
|||||||
https://en.luxuretv.com/videos/mom-gets-spit-roasted-by-stepsons-206761.html
|
https://en.luxuretv.com/videos/mom-gets-spit-roasted-by-stepsons-206761.html
|
||||||
https://en.luxuretv.com/videos/gorgeous-babe-eats-a-huge-log-290421.html
|
https://en.luxuretv.com/videos/gorgeous-babe-eats-a-huge-log-290421.html
|
||||||
https://en.luxuretv.com/videos/skin-and-bones-289472.html
|
https://en.luxuretv.com/videos/skin-and-bones-289472.html
|
||||||
|
https://en.luxuretv.com/videos/breast-beating-216004.html
|
||||||
|
https://en.luxuretv.com/videos/how-much-enthusiasm-is-to-much-484995.html
|
||||||
|
https://en.luxuretv.com/videos/leaking-sissy-while-fisted-479535.html
|
||||||
|
https://en.luxuretv.com/videos/bitch-mother-3-472609.html
|
||||||
|
https://en.luxuretv.com/videos/low-quality-clit-n-pussy-pump-462296.html
|
||||||
|
https://en.luxuretv.com/videos/punch-fisting-206256.html
|
||||||
|
https://en.luxuretv.com/videos/the-pregnant-bbc-slave-461821.html
|
||||||
|
https://en.luxuretv.com/videos/please-fuck-my-ass-183049.html
|
||||||
|
https://en.luxuretv.com/videos/doggy-rimming-423315.html
|
||||||
|
https://en.luxuretv.com/videos/little-girl-big-dick-395315.html
|
||||||
|
https://en.luxuretv.com/videos/she-is-100--obedient-451391.html
|
||||||
|
https://en.luxuretv.com/videos/horny-slut-turns-into-a-homeless-bbc-slut-pt-2-450221.html
|
||||||
|
https://en.luxuretv.com/videos/anal-bbc-only-448099.html
|
||||||
|
https://en.luxuretv.com/videos/sexy-chastity-ts-vs-bbc-390381.html
|
||||||
|
https://en.luxuretv.com/videos/she---s-a-bbc---s-urinal-pet-388194.html
|
||||||
|
https://en.luxuretv.com/videos/learning-to-be-a-submissive-188636.html
|
||||||
|
https://en.luxuretv.com/videos/proud-pet-choking-and-bagging-fuck-296404.html
|
||||||
|
https://en.luxuretv.com/videos/no-mercy-deepthroat-378282.html
|
||||||
|
https://en.luxuretv.com/videos/her-creepy-uncle-352442.html
|
||||||
|
https://en.luxuretv.com/videos/one-tough-sub-170039.html
|
||||||
|
https://en.luxuretv.com/videos/3d-necro-287302.html
|
||||||
|
https://en.luxuretv.com/videos/skin-and-bones-2-217196.html
|
||||||
|
https://en.luxuretv.com/videos/deepthroat-puking-255677.html
|
||||||
|
https://en.luxuretv.com/videos/amputee-sex-2-247839.html
|
||||||
|
https://en.luxuretv.com/videos/daddy-that---s-the-wrong-hole-187604.html
|
||||||
|
https://en.luxuretv.com/videos/insane-anal-180847.html
|
||||||
|
https://en.luxuretv.com/videos/out-favorite-face-punch-girl-186825.html
|
||||||
|
https://en.luxuretv.com/videos/ts-bbc-piss-slut-223033.html
|
||||||
|
https://en.luxuretv.com/videos/prolapse-fuck-5-171029.html
|
||||||
|
https://en.luxuretv.com/videos/snow-bunny---s-fall-pt-3-483111.html
|
||||||
|
https://en.luxuretv.com/videos/bad-uncle-good-niece-477333.html
|
||||||
|
https://en.luxuretv.com/videos/face-slap-orgasm-184606.html
|
||||||
|
https://en.luxuretv.com/videos/deepthroat-bbc-in-training-340098.html
|
||||||
|
https://en.luxuretv.com/videos/wife-wants-a-homeless-bbc-baby-pt-2-451075.html
|
||||||
|
https://en.luxuretv.com/videos/anal-assylum-449323.html
|
||||||
|
https://en.luxuretv.com/videos/fisting-mommy---s-holes-386880.html
|
||||||
|
https://en.luxuretv.com/videos/some-kind-of-weird-nose-fetish-409790.html
|
||||||
|
https://en.luxuretv.com/videos/having-fun-at-the-doggy-spa-375329.html
|
||||||
|
https://en.luxuretv.com/videos/crack-bimbo-291884.html
|
||||||
|
https://en.luxuretv.com/videos/vintage-girls-reformatory-1-226818.html
|
||||||
|
https://en.luxuretv.com/videos/mother-finishes-her-daughter-295058.html
|
||||||
|
https://en.luxuretv.com/videos/neck-snap-necro-glory-hole-291675.html
|
||||||
|
https://en.luxuretv.com/videos/public-cum-walk-2-261800.html
|
||||||
|
https://en.luxuretv.com/videos/ts-gets-fisted-234007.html
|
||||||
|
https://en.luxuretv.com/videos/just-give-me-a-happy-meal-171141.html
|
||||||
|
https://en.luxuretv.com/videos/prolapse-twerking-251871.html
|
||||||
|
https://en.luxuretv.com/videos/vintage-bdsm-2-269807.html
|
||||||
|
https://en.luxuretv.com/videos/dakota-sky-r-i-p-180134.html
|
||||||
|
https://en.luxuretv.com/videos/pregnant-gag-fuck-and-anal-188064.html
|
||||||
|
https://en.luxuretv.com/videos/deepthroat-training-232742.html
|
||||||
|
https://en.luxuretv.com/videos/her-1st-puke-501777.html
|
||||||
|
https://en.luxuretv.com/videos/anal-objects-and-sounding-498313.html
|
||||||
|
https://en.luxuretv.com/videos/face-slapping-487469.html
|
||||||
|
https://en.luxuretv.com/videos/all-her-holes-get-fisted-and-fucked-397841.html
|
||||||
|
https://en.luxuretv.com/videos/deepthroat-mania-453599.html
|
||||||
|
https://en.luxuretv.com/videos/ghetto-fuck-394159.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/choking-myself-at-work-because-i-was-told-to-by-daddy-481282.html
|
||||||
@@ -70,3 +70,9 @@ https://en.luxuretv.com/videos/russian-sluts-fucked-by-dogs-113873.html
|
|||||||
https://en.luxuretv.com/videos/sleep-teen-fucked-112197.html
|
https://en.luxuretv.com/videos/sleep-teen-fucked-112197.html
|
||||||
https://en.luxuretv.com/videos/dog---burned-with-desire-113587.html
|
https://en.luxuretv.com/videos/dog---burned-with-desire-113587.html
|
||||||
https://en.luxuretv.com/videos/fucked-by-her-grandpa-113146.html
|
https://en.luxuretv.com/videos/fucked-by-her-grandpa-113146.html
|
||||||
|
https://en.luxuretv.com/videos/graceful-japanese-shemale-plays-with-her-man-111994.html
|
||||||
|
https://en.luxuretv.com/videos/nicole-young--gangbang-and-bukkake-115970.html
|
||||||
|
https://en.luxuretv.com/videos/hot-lesbian-nuns-113866.html
|
||||||
|
https://en.luxuretv.com/videos/my-friends-gangbang-and-bukkake-my-wife-112852.html
|
||||||
|
https://en.luxuretv.com/videos/brunette-mouth-fucked-in-bdsm-113571.html
|
||||||
|
https://en.luxuretv.com/videos/grandpa-fucks-pregnant-girl-113211.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/1-177109.html
|
https://en.luxuretv.com/videos/1-177109.html
|
||||||
|
https://en.luxuretv.com/videos/dog-fucking-girl-with-his-tongue-292034.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/paki-fucks-white-girl-373742.html
|
||||||
@@ -3,3 +3,4 @@ https://en.luxuretv.com/videos/pregnant-sex-380356.html
|
|||||||
https://en.luxuretv.com/videos/taking-his-pregnant-wife-from-behind-380363.html
|
https://en.luxuretv.com/videos/taking-his-pregnant-wife-from-behind-380363.html
|
||||||
https://en.luxuretv.com/videos/big-titties-and-a-big-pregnant-belly-380360.html
|
https://en.luxuretv.com/videos/big-titties-and-a-big-pregnant-belly-380360.html
|
||||||
https://en.luxuretv.com/videos/cum-on-sleeping-girl-2-298801.html
|
https://en.luxuretv.com/videos/cum-on-sleeping-girl-2-298801.html
|
||||||
|
https://en.luxuretv.com/videos/pregnant-fisting-380358.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/got-stuck-in-between-my-legs-379920.html
|
https://en.luxuretv.com/videos/got-stuck-in-between-my-legs-379920.html
|
||||||
|
https://en.luxuretv.com/videos/riding-on-my-dog-cock-so-hard-375586.html
|
||||||
@@ -1,2 +1,4 @@
|
|||||||
https://en.luxuretv.com/videos/obedient-milf-gets-licked-462302.html
|
https://en.luxuretv.com/videos/obedient-milf-gets-licked-462302.html
|
||||||
https://en.luxuretv.com/videos/your-personal-vending-machine-458457.html
|
https://en.luxuretv.com/videos/your-personal-vending-machine-458457.html
|
||||||
|
https://en.luxuretv.com/videos/ruined-milf-pussy-with-big-can-445700.html
|
||||||
|
https://en.luxuretv.com/videos/bad-mom-birthing-bottle-441212.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/christmas-came-way-to-early-267017.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/will-you-make-this-all-yours-daddy-------------335168.html
|
||||||
|
https://en.luxuretv.com/videos/wanna-cum-with-me--329052.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/cock-342935.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/her-cunt-466670.html
|
https://en.luxuretv.com/videos/her-cunt-466670.html
|
||||||
|
https://en.luxuretv.com/videos/part-1-of-flies-just-crawling-in-out-and-all-over-my-loose-and-broken-anus-418863.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/cutest-pussy-with-biggest-juicy-clits-getting-fingered-by-bf-502554.html
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
https://en.luxuretv.com/videos/baily-wylde-getting-deepthroated-by-ftm-luke-hudson-155897.html
|
https://en.luxuretv.com/videos/baily-wylde-getting-deepthroated-by-ftm-luke-hudson-155897.html
|
||||||
https://en.luxuretv.com/videos/damien-grey-rides-legrand-wolfs-big-cock-189769.html
|
https://en.luxuretv.com/videos/damien-grey-rides-legrand-wolfs-big-cock-189769.html
|
||||||
https://en.luxuretv.com/videos/ftm-luke-hudson-stand-out-from-other-porn-stars-139135.html
|
https://en.luxuretv.com/videos/ftm-luke-hudson-stand-out-from-other-porn-stars-139135.html
|
||||||
|
https://en.luxuretv.com/videos/xander-james-rides-cade-maddox-big-cock-151682.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/dog-licking-latina-321107.html
|
||||||
@@ -7,3 +7,8 @@ https://en.luxuretv.com/videos/pregnant-181579.html
|
|||||||
https://en.luxuretv.com/videos/bro-sis-186212.html
|
https://en.luxuretv.com/videos/bro-sis-186212.html
|
||||||
https://en.luxuretv.com/videos/have-a-lick-182977.html
|
https://en.luxuretv.com/videos/have-a-lick-182977.html
|
||||||
https://en.luxuretv.com/videos/fuckin-that-ass-189761.html
|
https://en.luxuretv.com/videos/fuckin-that-ass-189761.html
|
||||||
|
https://en.luxuretv.com/videos/suck-it-bitch-183296.html
|
||||||
|
https://en.luxuretv.com/videos/tight-lil-ass-181528.html
|
||||||
|
https://en.luxuretv.com/videos/forced-bbc-185008.html
|
||||||
|
https://en.luxuretv.com/videos/mom-suckin-cock-194230.html
|
||||||
|
https://en.luxuretv.com/videos/hard-anal-198727.html
|
||||||
@@ -66,3 +66,17 @@ https://en.luxuretv.com/videos/public-orgasm-378401.html
|
|||||||
https://en.luxuretv.com/videos/marker-atm-318288.html
|
https://en.luxuretv.com/videos/marker-atm-318288.html
|
||||||
https://en.luxuretv.com/videos/milf-drinks-own-pee-316668.html
|
https://en.luxuretv.com/videos/milf-drinks-own-pee-316668.html
|
||||||
https://en.luxuretv.com/videos/dad-fuck-daughter-321710.html
|
https://en.luxuretv.com/videos/dad-fuck-daughter-321710.html
|
||||||
|
https://en.luxuretv.com/videos/ts-cums-on-own-face-424666.html
|
||||||
|
https://en.luxuretv.com/videos/ts-creampie-bf-440077.html
|
||||||
|
https://en.luxuretv.com/videos/husband-filming-389450.html
|
||||||
|
https://en.luxuretv.com/videos/sharing-wife-372334.html
|
||||||
|
https://en.luxuretv.com/videos/pregnant-fucking-377458.html
|
||||||
|
https://en.luxuretv.com/videos/confess-of-cheating-363706.html
|
||||||
|
https://en.luxuretv.com/videos/cumslut-wife-406077.html
|
||||||
|
https://en.luxuretv.com/videos/husband-regrets-335023.html
|
||||||
|
https://en.luxuretv.com/videos/anal-splitcam-360613.html
|
||||||
|
https://en.luxuretv.com/videos/filming-for-cuck-337562.html
|
||||||
|
https://en.luxuretv.com/videos/wife-wants-cum-348252.html
|
||||||
|
https://en.luxuretv.com/videos/tg-play-with-cock-322171.html
|
||||||
|
https://en.luxuretv.com/videos/fucking-my-tg-daughter-323227.html
|
||||||
|
https://en.luxuretv.com/videos/first-bbc-318034.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/i-got-horny-208893.html
|
https://en.luxuretv.com/videos/i-got-horny-208893.html
|
||||||
|
https://en.luxuretv.com/videos/i-love-to-suck-his-black-cock-and-tasty-balls-205151.html
|
||||||
@@ -1 +1,3 @@
|
|||||||
https://en.luxuretv.com/videos/horny-pawg-rides-teen-cock-320620.html
|
https://en.luxuretv.com/videos/horny-pawg-rides-teen-cock-320620.html
|
||||||
|
https://en.luxuretv.com/videos/busty-white-babe-used-by-bbc-320621.html
|
||||||
|
https://en.luxuretv.com/videos/single-mom-fucked-hard-by-bbc-297467.html
|
||||||
@@ -8,3 +8,10 @@ https://en.luxuretv.com/videos/pregnant-fun-447526.html
|
|||||||
https://en.luxuretv.com/videos/fun-with-friends-401030.html
|
https://en.luxuretv.com/videos/fun-with-friends-401030.html
|
||||||
https://en.luxuretv.com/videos/dripping-pussy-409966.html
|
https://en.luxuretv.com/videos/dripping-pussy-409966.html
|
||||||
https://en.luxuretv.com/videos/throat-fuck-390691.html
|
https://en.luxuretv.com/videos/throat-fuck-390691.html
|
||||||
|
https://en.luxuretv.com/videos/deborah-filipino-506164.html
|
||||||
|
https://en.luxuretv.com/videos/dogging-cumshots-450890.html
|
||||||
|
https://en.luxuretv.com/videos/young-prostitute-442539.html
|
||||||
|
https://en.luxuretv.com/videos/homoerotic-compilation-441773.html
|
||||||
|
https://en.luxuretv.com/videos/hard-dp-410068.html
|
||||||
|
https://en.luxuretv.com/videos/pregnant-fun-410066.html
|
||||||
|
https://en.luxuretv.com/videos/red-mask-rachael-503819.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/bbw-mature-ebony-with-white-dog-131211.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/relaxing-evening-at-home-499071.html
|
||||||
@@ -10,3 +10,5 @@ https://en.luxuretv.com/videos/team-russia---katka-230339.html
|
|||||||
https://en.luxuretv.com/videos/domino---pippa---a-new-love-228767.html
|
https://en.luxuretv.com/videos/domino---pippa---a-new-love-228767.html
|
||||||
https://en.luxuretv.com/videos/yasmin-threesome-229109.html
|
https://en.luxuretv.com/videos/yasmin-threesome-229109.html
|
||||||
https://en.luxuretv.com/videos/miss-alice---my-bitch-ambitions-444375.html
|
https://en.luxuretv.com/videos/miss-alice---my-bitch-ambitions-444375.html
|
||||||
|
https://en.luxuretv.com/videos/ladyboy-gold---alice-453645.html
|
||||||
|
https://en.luxuretv.com/videos/joanna-jet-229108.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/brutal-skullfuck-372212.html
|
||||||
@@ -7,3 +7,6 @@ https://en.luxuretv.com/videos/teen-used-by-2-fat-cocks-299553.html
|
|||||||
https://en.luxuretv.com/videos/best-friends-sister-gets-on-her-knees-for-cock---cum-225640.html
|
https://en.luxuretv.com/videos/best-friends-sister-gets-on-her-knees-for-cock---cum-225640.html
|
||||||
https://en.luxuretv.com/videos/she-eats-fresh-warm-creampie-287414.html
|
https://en.luxuretv.com/videos/she-eats-fresh-warm-creampie-287414.html
|
||||||
https://en.luxuretv.com/videos/young-petite-teen-gets-used-by-2-fat-cocks-298534.html
|
https://en.luxuretv.com/videos/young-petite-teen-gets-used-by-2-fat-cocks-298534.html
|
||||||
|
https://en.luxuretv.com/videos/teen-takes-bbc-deep-on-balcony---definitely-earns-that-cum-226041.html
|
||||||
|
https://en.luxuretv.com/videos/tiny-shy-teen-milks-fat-cock-with-her-mouth-289613.html
|
||||||
|
https://en.luxuretv.com/videos/amateur-teen-gets-her-insides-re-arranged-286218.html
|
||||||
@@ -94,3 +94,7 @@ https://en.luxuretv.com/videos/dog-sex-with-cute-chick-that-loves-beastiality-75
|
|||||||
https://en.luxuretv.com/videos/oral-sex-with-her-cute-dog-75927.html
|
https://en.luxuretv.com/videos/oral-sex-with-her-cute-dog-75927.html
|
||||||
https://en.luxuretv.com/videos/blonde-anna-enjoys-her-pitbull-s-cock-77173.html
|
https://en.luxuretv.com/videos/blonde-anna-enjoys-her-pitbull-s-cock-77173.html
|
||||||
https://en.luxuretv.com/videos/busty-mom-licked-clean-by-dog-in-kitchen-77163.html
|
https://en.luxuretv.com/videos/busty-mom-licked-clean-by-dog-in-kitchen-77163.html
|
||||||
|
https://en.luxuretv.com/videos/masked-brunette-whore-enjoys-feeling-dog-cock-77164.html
|
||||||
|
https://en.luxuretv.com/videos/--animal-sex-film---k9-fucks-a-whore-with-purple-hair-77070.html
|
||||||
|
https://en.luxuretv.com/videos/art-of-zoo---k9-breeds-a-slut-in-xmas-clothing-77059.html
|
||||||
|
https://en.luxuretv.com/videos/hot-blonde-animal-sex-with-her-dog-75968.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/long-and-hard-dog-cock-23896.html
|
https://en.luxuretv.com/videos/long-and-hard-dog-cock-23896.html
|
||||||
|
https://en.luxuretv.com/videos/big-suckable-dicks-302162.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/blonde-teen-fucks-bbc-with-mouth-414225.html
|
||||||
|
https://en.luxuretv.com/videos/big-black-cock-deepthroating-405473.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/wish-she-was-younger-452113.html
|
||||||
@@ -4,3 +4,4 @@ https://en.luxuretv.com/videos/sisters-kissing-426977.html
|
|||||||
https://en.luxuretv.com/videos/cute-pyt-ebony-teen-385320.html
|
https://en.luxuretv.com/videos/cute-pyt-ebony-teen-385320.html
|
||||||
https://en.luxuretv.com/videos/bad-mom-and-son-386435.html
|
https://en.luxuretv.com/videos/bad-mom-and-son-386435.html
|
||||||
https://en.luxuretv.com/videos/bad-mom-teaches-daughter-to-give-dad-head-390229.html
|
https://en.luxuretv.com/videos/bad-mom-teaches-daughter-to-give-dad-head-390229.html
|
||||||
|
https://en.luxuretv.com/videos/pretty-darkskin-part-2-383593.html
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
https://en.luxuretv.com/videos/teen-and-younger-girls-with-dog-and-horse-knott-313960.html
|
https://en.luxuretv.com/videos/teen-and-younger-girls-with-dog-and-horse-knott-313960.html
|
||||||
https://en.luxuretv.com/videos/kinky-redhead-amateur-coed-exposes-her-petite-body-and-treats-a-horse-to-a-bj-48718.html
|
https://en.luxuretv.com/videos/kinky-redhead-amateur-coed-exposes-her-petite-body-and-treats-a-horse-to-a-bj-48718.html
|
||||||
|
https://en.luxuretv.com/videos/sissy-cuckold-watches-gf-creampied-378854.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/dick-maniac-306542.html
|
https://en.luxuretv.com/videos/dick-maniac-306542.html
|
||||||
|
https://en.luxuretv.com/videos/get-yourself-a-someone-like-me-304441.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/b1-489218.html
|
||||||
@@ -4,3 +4,4 @@ https://en.luxuretv.com/videos/motivated-dog-159168.html
|
|||||||
https://en.luxuretv.com/videos/hors-154412.html
|
https://en.luxuretv.com/videos/hors-154412.html
|
||||||
https://en.luxuretv.com/videos/dog-fuck-154415.html
|
https://en.luxuretv.com/videos/dog-fuck-154415.html
|
||||||
https://en.luxuretv.com/videos/perfect-167092.html
|
https://en.luxuretv.com/videos/perfect-167092.html
|
||||||
|
https://en.luxuretv.com/videos/perfect-159439.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/asian-abg-fucked-hard-by-bbc-281902.html
|
||||||
|
https://en.luxuretv.com/videos/white-babe-takes-two-bbc-after-party-285352.html
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
https://en.luxuretv.com/videos/pony-vs-ass-153770.html
|
https://en.luxuretv.com/videos/pony-vs-ass-153770.html
|
||||||
https://en.luxuretv.com/videos/my-hubby-loves-it--218920.html
|
https://en.luxuretv.com/videos/my-hubby-loves-it--218920.html
|
||||||
|
https://en.luxuretv.com/videos/bottompony-used-by-bbc-roommate-462052.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/dog-couldnt-last-30-seconds-in-teens-pussy-255216.html
|
https://en.luxuretv.com/videos/dog-couldnt-last-30-seconds-in-teens-pussy-255216.html
|
||||||
|
https://en.luxuretv.com/videos/ginger-girl-lillian-gives-dog-huge-boner-254930.html
|
||||||
@@ -4,3 +4,8 @@ https://en.luxuretv.com/videos/id-presentation---nagisa---shioai-311108.html
|
|||||||
https://en.luxuretv.com/videos/industrial-lust-raven-454220.html
|
https://en.luxuretv.com/videos/industrial-lust-raven-454220.html
|
||||||
https://en.luxuretv.com/videos/ai-redhood-rossi-470040.html
|
https://en.luxuretv.com/videos/ai-redhood-rossi-470040.html
|
||||||
https://en.luxuretv.com/videos/tekla-1-6-sex-scenes-307421.html
|
https://en.luxuretv.com/videos/tekla-1-6-sex-scenes-307421.html
|
||||||
|
https://en.luxuretv.com/videos/slaman-farm-compilation-492932.html
|
||||||
|
https://en.luxuretv.com/videos/ntr-milf-teens-301872.html
|
||||||
|
https://en.luxuretv.com/videos/my-wife-loves-bbc-1-14-sex-scenes-267776.html
|
||||||
|
https://en.luxuretv.com/videos/three-sisters-summer-secret-376587.html
|
||||||
|
https://en.luxuretv.com/videos/vr-dream-02-sex-scenes-408691.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/messy-little-pussy-264895.html
|
https://en.luxuretv.com/videos/messy-little-pussy-264895.html
|
||||||
|
https://en.luxuretv.com/videos/horse-cock-for-breeding-slaves-231355.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/brookie-licking-her-huskie-stuffies-dog-cock-257668.html
|
||||||
@@ -16,3 +16,6 @@ https://en.luxuretv.com/videos/drunk-blonde-shows-off-her-mouth-full-of-cum-afte
|
|||||||
https://en.luxuretv.com/videos/teen-girlfriend-blows-uncut-dude-as-he-unloads-in-her-mouth-66247.html
|
https://en.luxuretv.com/videos/teen-girlfriend-blows-uncut-dude-as-he-unloads-in-her-mouth-66247.html
|
||||||
https://en.luxuretv.com/videos/horny-indian-girl-gobbling-huge-cock-ends-up-with-a-mouthful-of-jizz-66246.html
|
https://en.luxuretv.com/videos/horny-indian-girl-gobbling-huge-cock-ends-up-with-a-mouthful-of-jizz-66246.html
|
||||||
https://en.luxuretv.com/videos/hot-blonde-milf-takes-it-up-the-ass-before-getting-on-her-knees-for-messy-facial-66243.html
|
https://en.luxuretv.com/videos/hot-blonde-milf-takes-it-up-the-ass-before-getting-on-her-knees-for-messy-facial-66243.html
|
||||||
|
https://en.luxuretv.com/videos/coked-up-slut-enjoys-gulping-down-cum-from-random-strangers-in-glory-hole-66255.html
|
||||||
|
https://en.luxuretv.com/videos/pierced-blonde-gobbling-on-thick-black-cock-as-deep-as-she-can-manage-66272.html
|
||||||
|
https://en.luxuretv.com/videos/sexy-amateur-entices-her-dog-to-lick-her-horny-wet-hole-67958.html
|
||||||
@@ -9,3 +9,5 @@ https://en.luxuretv.com/videos/k991-469824.html
|
|||||||
https://en.luxuretv.com/videos/deep-in-me-289241.html
|
https://en.luxuretv.com/videos/deep-in-me-289241.html
|
||||||
https://en.luxuretv.com/videos/play-time-256020.html
|
https://en.luxuretv.com/videos/play-time-256020.html
|
||||||
https://en.luxuretv.com/videos/more-dog-fun-247847.html
|
https://en.luxuretv.com/videos/more-dog-fun-247847.html
|
||||||
|
https://en.luxuretv.com/videos/ride-the-h-cock-252597.html
|
||||||
|
https://en.luxuretv.com/videos/funfun-296216.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/trans-slut-327683.html
|
||||||
|
https://en.luxuretv.com/videos/trans-doll-330865.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/he-need-help-307889.html
|
https://en.luxuretv.com/videos/he-need-help-307889.html
|
||||||
|
https://en.luxuretv.com/videos/i-need-someone-to-help-306754.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/miss-275534.html
|
||||||
@@ -5,3 +5,4 @@ https://en.luxuretv.com/videos/beautiful-teen-gets-used-by-two-guys-in-public-24
|
|||||||
https://en.luxuretv.com/videos/hard-backshots-for-blonde-asian-teen-247395.html
|
https://en.luxuretv.com/videos/hard-backshots-for-blonde-asian-teen-247395.html
|
||||||
https://en.luxuretv.com/videos/lucky-guy-fucks-big-tits-escort-and-cums-on-her-223273.html
|
https://en.luxuretv.com/videos/lucky-guy-fucks-big-tits-escort-and-cums-on-her-223273.html
|
||||||
https://en.luxuretv.com/videos/big-tits-milf-gets-fucked-rough-by-horny-boy-249133.html
|
https://en.luxuretv.com/videos/big-tits-milf-gets-fucked-rough-by-horny-boy-249133.html
|
||||||
|
https://en.luxuretv.com/videos/shut-up-and-suck-it-while-i-m-playing--224816.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/nice-tight-pussy-484522.html
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
https://en.luxuretv.com/videos/her-morning-cum-load-89875.html
|
https://en.luxuretv.com/videos/her-morning-cum-load-89875.html
|
||||||
https://en.luxuretv.com/videos/big-ass-wifey-gets-shared-89306.html
|
https://en.luxuretv.com/videos/big-ass-wifey-gets-shared-89306.html
|
||||||
|
https://en.luxuretv.com/videos/-white-step-sister-wanted-to-suck-my-bbc-92412.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/dog-licking-below--makeout-466652.html
|
https://en.luxuretv.com/videos/dog-licking-below--makeout-466652.html
|
||||||
|
https://en.luxuretv.com/videos/dog-kissing-makeout-471538.html
|
||||||
@@ -17,3 +17,5 @@ https://en.luxuretv.com/videos/dogknot-dildo-358198.html
|
|||||||
https://en.luxuretv.com/videos/dog-cream-pie-compilation-402769.html
|
https://en.luxuretv.com/videos/dog-cream-pie-compilation-402769.html
|
||||||
https://en.luxuretv.com/videos/asian-facials-395009.html
|
https://en.luxuretv.com/videos/asian-facials-395009.html
|
||||||
https://en.luxuretv.com/videos/public-toilet-finger-blast-390391.html
|
https://en.luxuretv.com/videos/public-toilet-finger-blast-390391.html
|
||||||
|
https://en.luxuretv.com/videos/anal-fist---power-squirt-2-401715.html
|
||||||
|
https://en.luxuretv.com/videos/sexy-asian-gang-molested-375667.html
|
||||||
@@ -3,3 +3,4 @@ https://en.luxuretv.com/videos/bad-mom---blanket-hides-----from-hand-job-279767.
|
|||||||
https://en.luxuretv.com/videos/bad-mom---to-busy-when-----is-looking-for-her-285086.html
|
https://en.luxuretv.com/videos/bad-mom---to-busy-when-----is-looking-for-her-285086.html
|
||||||
https://en.luxuretv.com/videos/bad-mom---needs-to-suck-bbc-instead-of-talking-to-her----318577.html
|
https://en.luxuretv.com/videos/bad-mom---needs-to-suck-bbc-instead-of-talking-to-her----318577.html
|
||||||
https://en.luxuretv.com/videos/bad-mom---can-t-finish-blowjob-with-all-the-crying-301634.html
|
https://en.luxuretv.com/videos/bad-mom---can-t-finish-blowjob-with-all-the-crying-301634.html
|
||||||
|
https://en.luxuretv.com/videos/bad-mom---crying-----interrupts-giving-dad-a-blowjob-279452.html
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
https://en.luxuretv.com/videos/me-playing-with-my-arse-251296.html
|
||||||
|
https://en.luxuretv.com/videos/mature-trans-deep-throats-a-bbc-428436.html
|
||||||
@@ -2,3 +2,4 @@ https://en.luxuretv.com/videos/amateur-college-girl-eating-food-and-vomiting-whi
|
|||||||
https://en.luxuretv.com/videos/cum-trash-slut-380350.html
|
https://en.luxuretv.com/videos/cum-trash-slut-380350.html
|
||||||
https://en.luxuretv.com/videos/horny-pregnant-bitch-287779.html
|
https://en.luxuretv.com/videos/horny-pregnant-bitch-287779.html
|
||||||
https://en.luxuretv.com/videos/teen-analsex-380349.html
|
https://en.luxuretv.com/videos/teen-analsex-380349.html
|
||||||
|
https://en.luxuretv.com/videos/wanna-shower--382348.html
|
||||||
@@ -19,3 +19,10 @@ https://en.luxuretv.com/videos/owned-by-her-dog-184336.html
|
|||||||
https://en.luxuretv.com/videos/panties-pulled-to-side-178055.html
|
https://en.luxuretv.com/videos/panties-pulled-to-side-178055.html
|
||||||
https://en.luxuretv.com/videos/caninecountess-sucking-two-dog-dicks-345914.html
|
https://en.luxuretv.com/videos/caninecountess-sucking-two-dog-dicks-345914.html
|
||||||
https://en.luxuretv.com/videos/caninecountess-risky-licking-205700.html
|
https://en.luxuretv.com/videos/caninecountess-risky-licking-205700.html
|
||||||
|
https://en.luxuretv.com/videos/hot-latina-sucks-dog-cock-466463.html
|
||||||
|
https://en.luxuretv.com/videos/caninecountess-fooling-around---blowjob-475338.html
|
||||||
|
https://en.luxuretv.com/videos/hot-latina-sucks-dog-cock-2-466469.html
|
||||||
|
https://en.luxuretv.com/videos/hot-latina-fuck-and-suck-dog-466472.html
|
||||||
|
https://en.luxuretv.com/videos/kinky-lady-giving-dog-a-titjob-237388.html
|
||||||
|
https://en.luxuretv.com/videos/caninecountess-pussy-licked---blowjob-475340.html
|
||||||
|
https://en.luxuretv.com/videos/caninecountess-knotted-475337.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/sexy-as-all-fuck-320353.html
|
https://en.luxuretv.com/videos/sexy-as-all-fuck-320353.html
|
||||||
|
https://en.luxuretv.com/videos/delicious-this-girl-is-321041.html
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
https://en.luxuretv.com/videos/quick-hump-in-the-kitchen-390881.html
|
https://en.luxuretv.com/videos/quick-hump-in-the-kitchen-390881.html
|
||||||
https://en.luxuretv.com/videos/doggie-creampie-436125.html
|
https://en.luxuretv.com/videos/doggie-creampie-436125.html
|
||||||
https://en.luxuretv.com/videos/doggie-creampie-436128.html
|
https://en.luxuretv.com/videos/doggie-creampie-436128.html
|
||||||
|
https://en.luxuretv.com/videos/pussy-destroying-bbc-365907.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/cuckold-hubby-filming-and-taking-pictures-while-wife-fucks-a-bbc-31099.html
|
https://en.luxuretv.com/videos/cuckold-hubby-filming-and-taking-pictures-while-wife-fucks-a-bbc-31099.html
|
||||||
|
https://en.luxuretv.com/videos/my-wife-getting-fucked-by-a-bull-253815.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/pregame-warm-up-510207.html
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
https://en.luxuretv.com/videos/sloppy-blowjob-390785.html
|
https://en.luxuretv.com/videos/sloppy-blowjob-390785.html
|
||||||
https://en.luxuretv.com/videos/masturbation-with-my-favorite-vibrator-cocksuckergirl-style-380783.html
|
https://en.luxuretv.com/videos/masturbation-with-my-favorite-vibrator-cocksuckergirl-style-380783.html
|
||||||
https://en.luxuretv.com/videos/ass-fisting-and-huge-dildo-395784.html
|
https://en.luxuretv.com/videos/ass-fisting-and-huge-dildo-395784.html
|
||||||
|
https://en.luxuretv.com/videos/brutal-ass-fisting-410889.html
|
||||||
@@ -11,3 +11,4 @@ https://en.luxuretv.com/videos/kissing-dogs-279937.html
|
|||||||
https://en.luxuretv.com/videos/black-dog-licking-its-owner-s-tongue-283946.html
|
https://en.luxuretv.com/videos/black-dog-licking-its-owner-s-tongue-283946.html
|
||||||
https://en.luxuretv.com/videos/woman-gives-french-kiss--on-your-canine-lover-283887.html
|
https://en.luxuretv.com/videos/woman-gives-french-kiss--on-your-canine-lover-283887.html
|
||||||
https://en.luxuretv.com/videos/blowjob-387882.html
|
https://en.luxuretv.com/videos/blowjob-387882.html
|
||||||
|
https://en.luxuretv.com/videos/licking-balls-379040.html
|
||||||
@@ -20,3 +20,4 @@ https://en.luxuretv.com/videos/chlo-juggs-294905.html
|
|||||||
https://en.luxuretv.com/videos/massive-udders-266625.html
|
https://en.luxuretv.com/videos/massive-udders-266625.html
|
||||||
https://en.luxuretv.com/videos/cassie-in-the-shower-265774.html
|
https://en.luxuretv.com/videos/cassie-in-the-shower-265774.html
|
||||||
https://en.luxuretv.com/videos/she-s-put-a-bit-of-timber-on-259104.html
|
https://en.luxuretv.com/videos/she-s-put-a-bit-of-timber-on-259104.html
|
||||||
|
https://en.luxuretv.com/videos/raisa-414981.html
|
||||||
@@ -4,3 +4,5 @@ https://en.luxuretv.com/videos/me-taking-a-bbc-raw-111577.html
|
|||||||
https://en.luxuretv.com/videos/me-taking-a-bbc-raw-111576.html
|
https://en.luxuretv.com/videos/me-taking-a-bbc-raw-111576.html
|
||||||
https://en.luxuretv.com/videos/backing-up-to-the-gloryhole-for-a-bbc-creampie-128955.html
|
https://en.luxuretv.com/videos/backing-up-to-the-gloryhole-for-a-bbc-creampie-128955.html
|
||||||
https://en.luxuretv.com/videos/bi-bottom-in-a-dark-room-taking-a-bbc-128953.html
|
https://en.luxuretv.com/videos/bi-bottom-in-a-dark-room-taking-a-bbc-128953.html
|
||||||
|
https://en.luxuretv.com/videos/white-bottom-taking-bbc-in-the-ass-128951.html
|
||||||
|
https://en.luxuretv.com/videos/bbc-raw-130747.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/sexy-k9-whore-sucks-dog-cock-good-121369.html
|
||||||
@@ -6,3 +6,6 @@ https://en.luxuretv.com/videos/lauren-piss-1-390721.html
|
|||||||
https://en.luxuretv.com/videos/lauren-piss-3-398392.html
|
https://en.luxuretv.com/videos/lauren-piss-3-398392.html
|
||||||
https://en.luxuretv.com/videos/lauren-piss-2-390722.html
|
https://en.luxuretv.com/videos/lauren-piss-2-390722.html
|
||||||
https://en.luxuretv.com/videos/angels-got-talent---daisy-424462.html
|
https://en.luxuretv.com/videos/angels-got-talent---daisy-424462.html
|
||||||
|
https://en.luxuretv.com/videos/leilani-li-7-428715.html
|
||||||
|
https://en.luxuretv.com/videos/leilani-li-4-428712.html
|
||||||
|
https://en.luxuretv.com/videos/leilani-li-6-428714.html
|
||||||
@@ -79,3 +79,6 @@ https://en.luxuretv.com/videos/horny-teenage-twins-practice-kissing-on-cam-98505
|
|||||||
https://en.luxuretv.com/videos/blonde-sexy-daughters-forced-to-participate-in-orgy-family-party-98012.html
|
https://en.luxuretv.com/videos/blonde-sexy-daughters-forced-to-participate-in-orgy-family-party-98012.html
|
||||||
https://en.luxuretv.com/videos/incest-porn---hot-young-lewd-daughter-with-hairy-pussy-accidentally-flash-tits-for-daddy-98049.html
|
https://en.luxuretv.com/videos/incest-porn---hot-young-lewd-daughter-with-hairy-pussy-accidentally-flash-tits-for-daddy-98049.html
|
||||||
https://en.luxuretv.com/videos/hot-bulky-twins-with-huge-dongs-masturbate-together-in-bed-98509.html
|
https://en.luxuretv.com/videos/hot-bulky-twins-with-huge-dongs-masturbate-together-in-bed-98509.html
|
||||||
|
https://en.luxuretv.com/videos/--incest-porn-video---cutie-brunette-daughter-gets-surprised-with-cum-shot-to-the-face-97784.html
|
||||||
|
https://en.luxuretv.com/videos/old-daddy-covers-the-mouth-of-young-and-sexy-blond-daughter-while-he-pleasures-her-body-97867.html
|
||||||
|
https://en.luxuretv.com/videos/dads-have-a-groupie-and-bring-their-hot-and-young-teenage-daughters-to-fuck-98004.html
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
https://en.luxuretv.com/videos/fisted-white-boy-257915.html
|
||||||
|
https://en.luxuretv.com/videos/black-fuck-white-boy-257914.html
|
||||||
|
https://en.luxuretv.com/videos/black-man-fucked-my-little-white-boy-ass-257911.html
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
https://en.luxuretv.com/videos/black-shemale-masturbation-308797.html
|
||||||
|
https://en.luxuretv.com/videos/shemale-solo-305868.html
|
||||||
|
https://en.luxuretv.com/videos/hucow-slut-gets-milked-and-fucked-308796.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/i-need-a-k9-daddy-273178.html
|
||||||
@@ -1 +1,2 @@
|
|||||||
https://en.luxuretv.com/videos/young-wife-fucking-black-guys-at-home-183936.html
|
https://en.luxuretv.com/videos/young-wife-fucking-black-guys-at-home-183936.html
|
||||||
|
https://en.luxuretv.com/videos/young-wife-fucking-2-black-guys-at-home-183822.html
|
||||||
@@ -12,3 +12,4 @@ https://en.luxuretv.com/videos/girls-love-girls---twin-sisters-eat-pussy-pt-3-39
|
|||||||
https://en.luxuretv.com/videos/hot-chick-using-a-brush-to-fuck-herself-388831.html
|
https://en.luxuretv.com/videos/hot-chick-using-a-brush-to-fuck-herself-388831.html
|
||||||
https://en.luxuretv.com/videos/-ddlg-fantasy----read-my-favourite-book-when-my-stepdad-eats-my-ass-and-fucks-me-408202.html
|
https://en.luxuretv.com/videos/-ddlg-fantasy----read-my-favourite-book-when-my-stepdad-eats-my-ass-and-fucks-me-408202.html
|
||||||
https://en.luxuretv.com/videos/apteen-masturbates-in-front-of-the-camera---luxuretv-388991.html
|
https://en.luxuretv.com/videos/apteen-masturbates-in-front-of-the-camera---luxuretv-388991.html
|
||||||
|
https://en.luxuretv.com/videos/-incest-rp--her-virginity-goes-bye-bye-when-60-years-old-stepdad-comes-in-404191.html
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
https://en.luxuretv.com/videos/tranny-plows-his-ass-cumpilation-484054.html
|
||||||
|
https://en.luxuretv.com/videos/tranny-hot-cum-cumpilation-484306.html
|
||||||
|
https://en.luxuretv.com/videos/tranny-monster-cock-cumpilation-480203.html
|
||||||
|
https://en.luxuretv.com/videos/tranny-monster-cocks-508435.html
|
||||||
|
https://en.luxuretv.com/videos/gaping-tranny-hole-497771.html
|
||||||
@@ -4,3 +4,4 @@ https://en.luxuretv.com/videos/cousin-taking-her-dogs-cock-171084.html
|
|||||||
https://en.luxuretv.com/videos/bought-prostitute-takes-dogs-knot-170611.html
|
https://en.luxuretv.com/videos/bought-prostitute-takes-dogs-knot-170611.html
|
||||||
https://en.luxuretv.com/videos/knotty-339754.html
|
https://en.luxuretv.com/videos/knotty-339754.html
|
||||||
https://en.luxuretv.com/videos/my-cousin-riding-cock-192577.html
|
https://en.luxuretv.com/videos/my-cousin-riding-cock-192577.html
|
||||||
|
https://en.luxuretv.com/videos/my-cousin-207300.html
|
||||||
@@ -2,3 +2,4 @@ https://en.luxuretv.com/videos/dog-eat-owners-pussy-154492.html
|
|||||||
https://en.luxuretv.com/videos/dog-big-dick-150378.html
|
https://en.luxuretv.com/videos/dog-big-dick-150378.html
|
||||||
https://en.luxuretv.com/videos/dog-lick-pussy-152353.html
|
https://en.luxuretv.com/videos/dog-lick-pussy-152353.html
|
||||||
https://en.luxuretv.com/videos/k9-fuck-mature-baby-149993.html
|
https://en.luxuretv.com/videos/k9-fuck-mature-baby-149993.html
|
||||||
|
https://en.luxuretv.com/videos/three-some-with-dog-153092.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/moaning-gay-k9-423984.html
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://en.luxuretv.com/videos/ass-fucked-real-giid-507485.html
|
||||||
@@ -4,3 +4,4 @@ https://en.luxuretv.com/videos/blonde-slut-blowjob-horse-cock-and-taste-cum-1771
|
|||||||
https://en.luxuretv.com/videos/my-idol-is-pandora-167334.html
|
https://en.luxuretv.com/videos/my-idol-is-pandora-167334.html
|
||||||
https://en.luxuretv.com/videos/beautiful-blonde-babe-massages-horse-dick-and-got-fucked-in-animal-sex-video-403232.html
|
https://en.luxuretv.com/videos/beautiful-blonde-babe-massages-horse-dick-and-got-fucked-in-animal-sex-video-403232.html
|
||||||
https://en.luxuretv.com/videos/hot-women-with-horse-zoophilia-13536.html
|
https://en.luxuretv.com/videos/hot-women-with-horse-zoophilia-13536.html
|
||||||
|
https://en.luxuretv.com/videos/on-the-street-276755.html
|
||||||
Loaded 100 of 949 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user