Scraping Pornhub, help. - Code inside

Bambarbiakirgudu

Regular Member
Joined
Nov 9, 2016
Messages
358
Reaction score
63
Hello Everyone,

I've been trying to write a Pornhub video scraping script for use on my WordPress-based sites. My initial goal was to retrieve the video itself along with the title and description information. However, no matter what I tried, I couldn't get the video or the metadata. I'll share my code with you all, and I would greatly appreciate any assistance you can provide. Aah by the way my code does not show up any errors at all and i use qualified residencial proxies as well.
import wx
import os
import random
from threading import Thread
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import requests

class VideoDownloaderApp(wx.Frame):
def __init__(self, parent, title):
# Initialize the main frame
super(VideoDownloaderApp, self).__init__(parent, title=title, size=(600, 400))
self.panel = wx.Panel(self)

# Initialize variables
self.proxy_list = []
self.download_folder = os.getcwd()

# GUI components
self.folder_label = wx.StaticText(self.panel, label="Download Folder: " + self.download_folder)
self.proxy_file_label = wx.StaticText(self.panel, label="No Proxy File Selected")
self.search_box = wx.TextCtrl(self.panel)
self.search_button = wx.Button(self.panel, label="Search")
self.results_list = wx.ListBox(self.panel, style=wx.LB_SINGLE)
self.download_button = wx.Button(self.panel, label="Download Selected")
self.folder_button = wx.Button(self.panel, label="Browse Folder")
self.proxy_button = wx.Button(self.panel, label="Load Proxy File")

# Event bindings
self.search_button.Bind(wx.EVT_BUTTON, self.on_search)
self.results_list.Bind(wx.EVT_LISTBOX_DCLICK, self.on_download)
self.download_button.Bind(wx.EVT_BUTTON, self.on_download)
self.folder_button.Bind(wx.EVT_BUTTON, self.on_browse_folder)
self.proxy_button.Bind(wx.EVT_BUTTON, self.on_load_proxy)

# Layout the GUI components
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.folder_label, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.folder_button, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.proxy_file_label, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.proxy_button, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(wx.StaticText(self.panel, label="Video Search"), 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.search_box, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.search_button, 0, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.results_list, 1, wx.ALL | wx.EXPAND, 5)
self.sizer.Add(self.download_button, 0, wx.ALL | wx.EXPAND, 5)

self.panel.SetSizer(self.sizer)
self.Centre()
self.Show()

def load_proxies(self, filename):
# Load proxies from a file
with open(filename, 'r') as f:
return [line.strip() for line in f]

def get_random_proxy(self):
# Get a random proxy from the list
if not self.proxy_list:
wx.MessageBox('Proxy list is empty. Please load a proxy file.', 'Error', wx.OK | wx.ICON_ERROR)
return None
proxy = random.choice(self.proxy_list)
ip, port, user, password = proxy.split(":")
return {
"http": f"http://{user}:{password}@{ip}:{port}",
"https": f"https://{user}:{password}@{ip}:{port}"
}

def on_search(self, event):
# Handle search button click
if not self.proxy_list:
dlg = wx.MessageDialog(self, "Please load a proxy file first.", "Error", wx.OK | wx.ICON_ERROR)
dlg.ShowModal()
return

query = self.search_box.GetValue()
if query:
Thread(target=self.search_videos, args=(query,)).start()

def search_videos(self, query):
# Search for videos based on the query
proxy = self.get_random_proxy()
if not proxy:
return

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server={proxy["http"]}')

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get("https://www.pornhub.com")

search_box = driver.find_element(By.NAME, 'search')
search_box.send_keys(query)
search_box.submit()

self.results = []
results_elements = driver.find_elements(By.CSS_SELECTOR, 'a.video-title')
for element in results_elements:
self.results.append((element.get_attribute('href'), element.text))

driver.quit()

wx.CallAfter(self.update_results_list)

def update_results_list(self):
# Update the results list with the search results
self.results_list.Clear()
for result in self.results:
self.results_list.Append(result[1])

def on_download(self, event):
# Handle download button click
selection = self.results_list.GetSelection()
if selection != wx.NOT_FOUND:
url = self.results[selection][0]
Thread(target=self.download_video, args=(url,)).start()

def download_video(self, url):
# Show downloading progress
dlg = wx.ProgressDialog("Downloading video...", "Please wait", maximum=100, parent=self, style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)

try:
# Download the video
response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))
block_size = 1024
downloaded_bytes = 0

filename = url.split("/")[-1]
filepath = os.path.join(self.download_folder, filename)

with open(filepath, 'wb') as f:
for data in response.iter_content(block_size):
downloaded_bytes += len(data)
f.write(data)
progress = int(downloaded_bytes / total_size * 100)
dlg.Update(progress)

except Exception as e:
wx.MessageBox(f"Error downloading video: {e}", "Error", wx.OK | wx.ICON_ERROR)
finally:
dlg.Destroy()
wx.CallAfter(self.show_download_complete)

def show_download_complete(self):
# Show a message when download is complete
dlg = wx.MessageDialog(self, "Download complete", "Success", wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()

def on_browse_folder(self, event):
# Open folder selection dialog
dialog = wx.DirDialog(self, "Choose download folder", self.download_folder)
if dialog.ShowModal() == wx.ID_OK:
self.download_folder = dialog.GetPath()
self.folder_label.SetLabel("Download Folder: " + self.download_folder)

def on_load_proxy(self, event):
# Open file dialog to load proxy file
dialog = wx.FileDialog(self, "Choose a proxy file", wildcard="Text files (*.txt)|*.txt|All files (*.*)|*.*")
if dialog.ShowModal() == wx.ID_OK:
proxy_file = dialog.GetPath()
self.proxy_list = self.load_proxies(proxy_file)
self.proxy_file_label.SetLabel("Proxy File: " + proxy_file)

if __name__ == "__main__":
# Run the application
app = wx.App(False)
frame = VideoDownloaderApp(None, "Video Downloader")
app.MainLoop()
 
run it through a custom gpt and update the code with AI
 

Aa didn'T know this, learning something new. Thank You. it seems they have an other script might be what i wanted. https://www.wp-script.com/adult-wordpress-plugins/adult-mass-videos-embedder/

Although i m unsure is there any difference between embedding and grabbing process. ANd also wonder if anyone knows hosting Your own videos or hotlinking them makes any difference from SEO perspective.
 
Back
Top