Bambarbiakirgudu
Regular Member
- Nov 9, 2016
- 358
- 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()
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()