Найти - Пользователи
Полная версия: Подскажите с парсером плейлистов в youtube
Начало » Python для новичков » Подскажите с парсером плейлистов в youtube
1 2
satfan
Подскажите.
то-то ругается на 38 строку на это “a”
Вся строка: with open(“CUsers/Александр/Desktop/yotube_plist_downloader/out.txt, ”a“, encoding = ”utf-8") as files:
Вот код скрипта:
 # -*- coding: utf-8 -*-
from bs4 import Beautifulsoup
import requests
import re
def scrape_videos(url):
	req = requests.get(url)
	send = Beautifulsoup(req.text, "html.parser")
	search = send.find_all("script")
	key = '"videoId":'
	data = re.findall(key + r"([^*]{11})", str(search))
	
	return data
	
def scrape_lists(url):
	req = requests.get(url)
	send = Beautifulsoup(req.text, "html.parser")
	search = send.find_all("script")
	key = '"playlistId":"'
	data = re.findall(key + r"([^*]{14})", str(search))
	
	return data
	
if _name_ == "_main_":
	url ="https://www.yotube.com/c/HowdyhoNet/playlists"
	data = scrape_lists(url)
	data = data[::3]
	data = data[:-2] 
	
	for i in data:
		output = 'https://www.yotube.com/playlist?list=' + i
		vid = scrape_videos(output)
		vid = vid[::3]
		vid = vid[:-1] 
		
		for i in vid:
			with open("C://Users/Александр/Desktop/yotube_plist_downloader/out.txt," "a", encoding = "utf-8") as files:
				files.write(str('https://www.yotube.com/watch?v=' + i + '\n'))
				print('https://www.yotube.com/watch?v=' + i')
	
py.user.next
Там двойной кавычки не хватает после txt .
satfan
Спасибо py.user.next
Эта ошибка ушла. Появилась другая:
Строка 40:
 files.write(str('https://www.yotube.com/watch?v=' + i + '\n'))
Ругается на двоеточие после https
py.user.next
satfan
Эта ошибка ушла. Появилась другая:
Строка 40:
В строке с print поставь одинарную кавычку перез https .
satfan
Всё исправил, как Вы сказали.
Ещё ошибка:
py.user.next
Я исправил все ошибки, там их куча. Это запускается и всё сохраняет правильно.
#!/usr/bin/env python3

from bs4 import BeautifulSoup
import requests
import re

def scrape_videos(url):
req = requests.get(url)
send = BeautifulSoup(req.text, "html.parser")
search = str(send.find_all("script"))
key = '"videoId":"'
data = re.findall(key + r"([^*]{11})", search)
return data

def scrape_lists(url):
req = requests.get(url)
send = BeautifulSoup(req.text, "html.parser")
search = str(send.find_all("script"))
key = '"playlistId":"'
data = re.findall(key + r"([^*]{34})", search)
return data

if __name__ == "__main__":
url ="https://www.youtube.com/c/HowdyHoNet/playlists"
data = scrape_lists(url)
data = data[::3]
data = data[:-2]
for i in data:
output = 'https://www.youtube.com/playlist?list=' + i
vid = scrape_videos(output)
vid = vid[::3]
vid = vid[:-1]
for i in vid:
#ofname = "C:/Users/Александр/Desktop/yotube_plist_downloader/out.txt"
ofname = 'out.txt'
with open(ofname, "a", encoding = "utf-8") as files:
files.write('https://www.youtube.com/watch?v=' + i + '\n')
print('https://www.youtube.com/watch?v=' + i)
satfan
Уважаемый py.user.next огромное спасибо.
Скрипт я писал с видео, потому были ошибки.
Всё отлично работает.
Извините, я только начал учит Питон.
Ваш форум лучший.
———————-
Только не хватает Заголовков видео перед каждой ссылкой и пробела, который их разделяет.
Как сделать так чтобы в out.txt сохранялось так ?
————————————————————————-
КАК УДАЛИТЬ ВИРУСЫ С КОМПЬЮТЕРА? 100% РАБОЧИЙ МЕТОД
https://www.youtube.com/watch?v=J4iMxPNCo9w

Как ускорить ИНТЕРНЕТ до максимума? 100% РАБОЧИЙ МЕТОД
https://www.youtube.com/watch?v=BbXXPlvcwYw

и т.д.
py.user.next
satfan
Только не хватает Заголовков видео перед каждой ссылкой и пробела, который их разделяет.
Как сделать так чтобы в out.txt сохранялось так ?

Тут я дописал функцию получения названия видео и поменял вывод немного.
#!/usr/bin/env python3

from bs4 import BeautifulSoup
import requests
import re

def scrape_videos(url):
req = requests.get(url)
send = BeautifulSoup(req.text, "html.parser")
search = str(send.find_all("script"))
key = '"videoId":"'
data = re.findall(key + r"([^*]{11})", search)
return data

def scrape_lists(url):
req = requests.get(url)
send = BeautifulSoup(req.text, "html.parser")
search = str(send.find_all("script"))
key = '"playlistId":"'
data = re.findall(key + r"([^*]{34})", search)
return data

def get_video_title(url):
req = requests.get(url)
send = BeautifulSoup(req.text, "html.parser")
search = send.title.text
data = search[:-10]
return data

if __name__ == "__main__":
url ="https://www.youtube.com/c/HowdyHoNet/playlists"
data = scrape_lists(url)
data = data[::3]
data = data[:-2]
for i in data:
output = 'https://www.youtube.com/playlist?list=' + i
vid = scrape_videos(output)
vid = vid[::3]
vid = vid[:-1]
for i in vid:
#ofname = "C:/Users/Александр/Desktop/yotube_plist_downloader/out.txt"
ofname = 'out.txt'
video_url = 'https://www.youtube.com/watch?v=' + i
video_title = get_video_title(video_url)
with open(ofname, "a", encoding = "utf-8") as files:
print(video_title + '\n' + video_url + '\n', file=files)
print(video_title + '\n' + video_url + '\n')
satfan
Спасибо.
Скрипт сработал. Но сохранилось только 6 ссылок. А далее ошибка:
 Traceback (most recent call last):
  File "C:\Users\Александр\Desktop\yotube_plist_downloader\plist_down.py", line 46, in <module>
    print(video_title + '\n' + video_url + '\n')
UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f631' in position 0: Non-BMP character not supported in Tk
>>> 
py.user.next
Зайди в директорию через консоль и запускай его в консоли.
Действия
Win + R
cmd.exe
cd C:\Users\Александр\Desktop\yotube_plist_downloader
dir
python plist_down.py

Не надо IDLE использовать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB