Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2021 10:46:08

satfan
Зарегистрирован: 2019-02-02
Сообщения: 140
Репутация: +  -2  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Подскажите.
то-то ругается на 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')
	

Отредактировано satfan (Апрель 16, 2021 12:03:57)

Прикреплённый файлы:
attachment yotube_plist_downloader.rar (684 байта)

Офлайн

#2 Апрель 16, 2021 11:05:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Там двойной кавычки не хватает после txt .



Офлайн

#3 Апрель 16, 2021 11:19:15

satfan
Зарегистрирован: 2019-02-02
Сообщения: 140
Репутация: +  -2  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Спасибо py.user.next
Эта ошибка ушла. Появилась другая:
Строка 40:

 files.write(str('https://www.yotube.com/watch?v=' + i + '\n'))
Ругается на двоеточие после https

Отредактировано satfan (Апрель 16, 2021 11:20:14)

Офлайн

#4 Апрель 16, 2021 11:32:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

satfan
Эта ошибка ушла. Появилась другая:
Строка 40:
В строке с print поставь одинарную кавычку перез https .



Офлайн

#5 Апрель 16, 2021 12:17:25

satfan
Зарегистрирован: 2019-02-02
Сообщения: 140
Репутация: +  -2  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Всё исправил, как Вы сказали.
Ещё ошибка:

Прикреплённый файлы:
attachment Screenshot_1.jpg (102,7 KБ)

Офлайн

#6 Апрель 16, 2021 22:01:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Я исправил все ошибки, там их куча. Это запускается и всё сохраняет правильно.

#!/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)



Офлайн

#7 Апрель 17, 2021 06:49:01

satfan
Зарегистрирован: 2019-02-02
Сообщения: 140
Репутация: +  -2  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Уважаемый py.user.next огромное спасибо.
Скрипт я писал с видео, потому были ошибки.
Всё отлично работает.
Извините, я только начал учит Питон.
Ваш форум лучший.
———————-
Только не хватает Заголовков видео перед каждой ссылкой и пробела, который их разделяет.
Как сделать так чтобы в out.txt сохранялось так ?
————————————————————————-
КАК УДАЛИТЬ ВИРУСЫ С КОМПЬЮТЕРА? 100% РАБОЧИЙ МЕТОД
https://www.youtube.com/watch?v=J4iMxPNCo9w

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

и т.д.

Офлайн

#8 Апрель 17, 2021 08:27:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

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')



Офлайн

#9 Апрель 17, 2021 09:09:04

satfan
Зарегистрирован: 2019-02-02
Сообщения: 140
Репутация: +  -2  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Спасибо.
Скрипт сработал. Но сохранилось только 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
>>> 

Отредактировано satfan (Апрель 17, 2021 09:12:54)

Офлайн

#10 Апрель 17, 2021 16:30:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите с парсером плейлистов в youtube

Зайди в директорию через консоль и запускай его в консоли.
Действия

Win + R
cmd.exe
cd C:\Users\Александр\Desktop\yotube_plist_downloader
dir
python plist_down.py

Не надо IDLE использовать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version