0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 62
1

Парсер почт youtube на python

07.07.2020, 20:34. Показов 6354. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер,Друзья! мне когда то давний друг написал парсер почт youtube на питоне,прошло 2 месяца и этот парсер перестал работать,можете исправить проблему? я сам на питоне никогда не писал код,но все равно я проанализировал код и заменил ссылку для поиска роликов на другую,потому что ссылка для поиска ютуб отличалась от той что сейчас используется на youtube,но все равно он не заработал ;( файл с приложу к данному посту.
Вложения
Тип файла: rar project.rar (2.4 Кб, 15 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2020, 20:34
Ответы с готовыми решениями:

Парсер youtube
Парсер ютуба выдал в конце ошибку: Line 75 finally: ^ SyntaxError: invalid syntax...

Youtube парсер видео
Здравствуйте! Возникла следующая проблема при написании парсера видео ютуб: когда я пишу любой...

YouTube Парсер
Есть ли на форуме те, кто реализовывал парсинг YouTube на PHP и знаком с подводными камнями и...

Сервер + youtube парсер
День добрый! Появилась необходимость создать небольшой сайт, с серверной частью, которая будет...

Парсер youtube перестал работать?
IDLE (Python 3.10 64-bit) Windows 10 ————————– Уважаемые подскажите. Парсер youtube работал...

11
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
08.07.2020, 06:07 2
Quad, пока 0 просмотров и я тоже качать твой архив не буду =)
если напишешь что именно пишет в ошибках -может и подскажу
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 62
08.07.2020, 10:36  [ТС] 3
Его писал не я)) а мой давний знакомый,я не знаю этот язык.Насчет файла,так это обычный .py файл с кодом.
0
4284 / 964 / 138
Регистрация: 29.01.2013
Сообщений: 5,668
08.07.2020, 10:50 4
и что?
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
08.07.2020, 13:00 5
Цитата Сообщение от Quad Посмотреть сообщение
Его писал не я))
какая разница? что пишет то при старте? какие ошибки выдает?
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 62
08.07.2020, 18:52  [ТС] 6
Синтаксических ошибок нету,программа не собирает ссылки.. пишет: "собрано 0 ссылок"
0
4284 / 964 / 138
Регистрация: 29.01.2013
Сообщений: 5,668
09.07.2020, 10:05 7
Quad, ну так приложите кусок кода, который за это отвечает
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 62
09.07.2020, 13:36  [ТС] 8
Пожалуйста...весь код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup as bs
import requests
import re
import time
import threading
from random_word import RandomWords
headers = {'accept-language':'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'}
 
request = []
all_emails = []
blacklist = ['']
WORDS = 200#Кол-во слов для автогенерации
start = 0
end = 100
min_subs = 10000#Минимальное кол-во сабов
max_subs = 350000#Максимальное кол-во сабов
class Parser():
    def _init__(self):
        pass
 
    def get_urls_to_pars(self, request):
        session = requests.Session()
        all_urls = []
        for j in request:
            try:
                urls_content = session.get(f'https://www.youtube.com/results?search_query={j}&sp=EgQIBBAB', headers=headers)
                urls_bs = bs(urls_content.text,'html.parser')
                urls = urls_bs.find_all('a', attrs={'dir':'ltr'})
                for i in urls:
                    if '/watch' in i['href']:
                        all_urls.append(i['href'])
            except (requests.exceptions.ProxyError, requests.exceptions.ConnectionError) as err:
                print(f'Ошибка с соединением. Возможно вы посылаете много запросов | {err}')
            except Exception as err1:
                print('Ошибка')
                continue
        return all_urls
 
    def pars_mails(self, urls, start, end):
        session = requests.Session()
        for i in range(start, end):
            try:
                email_content = session.get(f'https://www.youtube.com{urls[i]}', headers=headers)
                pattern = r"[\w\.-]+@[\w\.-]+"
                mail = re.search(pattern,email_content.text.replace("\\n", ""))
                if mail and mail[0] not in all_emails:
                    subs = bs(email_content.text,'html.parser')
                    subs_count = subs.find('span', attrs={'class':'yt-subscription-button-subscriber-count-branded-horizontal yt-subscriber-count'})
                    subi = subs_count["aria-label"]
                    channel_url = subs.find('meta', attrs={'itemprop':'channelId'}).get('content')
                    channel_url= 'https://www.youtube.com/channel/'+channel_url
                    if 'тыс' in subi and ',' in subi:
                        subi = int(subi[:subi.find(',')].replace("\xa0",''))*1000
                    elif 'тыс' in subi:
                        subi = int(subi[:subi.find('т')].replace("\xa0", ''))*1000
                    elif 'млн' in subi and ',' in subi:
                        subi = int(subi[:subi.find(',')].replace("\xa0",''))*1000000
                    elif 'млн' in subi:
                        subi = int(subi[:subi.find('м')].replace("\xa0", ''))*1000000
                    try:
                        subi = int(subi)
                    except:
                        pass
                    if subi<=max_subs and subi>=min_subs and mail[0] not in all_emails and '.' in mail[0]:
                        all_emails.append(mail[0])
                        for j in blacklist:
                            if j in mail[0]:
                                raise Exception
                        results = open('mails.txt', 'a')
                        results2 = open('mails_full.txt', 'a')
                        results3 = open('mails_db.txt', 'a')
                        print(f'subs - {subi}, email - {mail[0]}, url - {channel_url}')
                        try:
                            results.write(f'{mail[0]}\n')
                        except Exception as errorfile:
                            print(errorfile)
                            pass
                        try:
                            results2.write(f'=' * 15 + '\n')
                            results2.write(f'subs - {subi}, email - {mail[0]}, url = {channel_url}\n')
                            results2.write(f'=' * 15 + '\n')
                            results2.write('\n')
                        except Exception as errorfile2:
                            print(errorfile2)
                            continue
                        try:
                            results3.write(f'{mail[0]}\n')
                        except Exception as error3:
                            print(error3)
                            pass
                        results.close()
                        results2.close()
                        results3.close()
 
            except Exception as err:
                print(err)
                time.sleep(0.8)
                subi = 0
                channel_url = ''
                continue
 
    def get_words(self):
        words = []
        r = requests.get('https://jimpix.co.uk/generators/word-generator.asp?go=yes&ul1=0&chars=0&match=0&numwords=25&aplha=0&lk=&lki=lki1')
        soup = bs(r.content, 'html.parser')
        first_step = soup.find('ul', attrs={'class':'list-unstyled'}).find_all_next('a', attrs={'style':'color:white;'})
        for i in first_step:
            words.append(i.text)
        return words
 
 
if __name__ == '__main__':
    parse = Parser()
    print('Выберите режим работы: 1 - Автоматическая генерация слов и поиск почт, 2 - Загрузка слов из requests.txt [НЕ ЗАБУДЬТЕ СОЗДАТЬ файл requests.txt и записать туда слова для поиска, 3 - Бесконечный парсинг почт с ютуба')
    mode = input('')
    if mode == "1":
        while True:
            try:
                print('Генерирую ключевые слова для поиска')
                request = parse.get_words()
                print(f'Удалось сгенерировать {len(request)} слов')
                break
            except:
                continue
    elif mode == "2":
        print('Загружаю ключевые слова из requests.txt...')
        try:
            f = open('requests.txt', encoding='utf-8')
            lines = f.readlines()
            num_lines = sum(1 for line in open('requests.txt', encoding='utf-8'))
            for i in range(num_lines):
                request.append(lines[i].replace('\n',''))
        except:
            print("Ошибка, возможно вы не создали файл requests.txt")
    elif mode =="3":
        print('Выбран режим бесконечного парсинга почт с ютуба...')
        while True:
            try:
                request = parse.get_words()
                print(request)
                print(f'Удалось сгенерировать {len(request)} слов')
                print('Собираю ссылки для парсинга...')
                urls = parse.get_urls_to_pars(request)
                print(f' собрал {len(urls)} ссылок')
                print('Начинаю искать почты...')
                THREADS = len(urls) // 100
                for index in range(THREADS):
                    threading.Thread(target=parse.pars_mails, args=(urls, start, end)).start()
                    start += 100
                    end += 100
                threading.Thread(target=parse.pars_mails, args=(urls, start, len(urls))).start()
                start = 0
                end = 100
                time.sleep(10)
            except Exception as error:
                print(error)
                time.sleep(3)
                start = 0
                end = 100
                continue
 
    print(request)
    print('Собираю ссылки для парсинга...')
    urls = parse.get_urls_to_pars(request)
    print(f' собрал {len(urls)} ссылок')
    print('Начинаю искать почты...')
    THREADS = len(urls)//100
    for index in range(THREADS):
        threading.Thread(target=parse.pars_mails, args=(urls, start, end)).start()
        start += 100
        end += 100
    threading.Thread(target=parse.pars_mails, args=(urls, start, len(urls))).start()
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 3
23.07.2020, 11:32 9
Подниму тему т.к как интересует аналогичный вопрос по этому скрипту.
Разберу в чем вообще заключается сама работа этого скрипта-парсера.
Скрипт должен из рандомных англ слов собрать каналы на youtube и в дальнейшем с этих каналов найти почты для связи с создателем канала,вот так выглядит само меню при старте скрипта
Выберите режим работы: 1 - Автоматическая генерация слов и поиск почт, 2 - Загрузка слов из requests.txt [НЕ ЗАБУДЬТЕ СОЗДАТЬ файл requests.txt и записать туда слова для поиска, 3 - Бесконечный парсинг почт с ютуба
При выборе например 1 пункта меню скрипт отрабатывает таким образом
Генерирую ключевые слова для поиска
Удалось сгенерировать 25 слов
['ghost', 'verify', 'cooling', 'gadolinium', 'lock', 'this', 'dominique', 'red', 'path', 'insecure', 'cello', 'bullfight', 'island', 'trapdoor', 'splashy', 'culminate', 'krypton', 'stable', 'york', 'urban', 'straggler', 'rasp', 'fountain', 'precious', 'creamy']
Собираю ссылки для парсинга...
собрал 0 ссылок
Начинаю искать почты...
Скрипт перестал собирать сылки с youtube,хотелось бы узнать в чем может быть проблема?
Сам скрипт
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup as bs
from bs4 import BeautifulSoup as biusdjAKq
import requests as NjOooJsj
import requests
import re
import time
import threading
import string
import random
import subprocess
from typing import Optional
import sys
import uuid
import warnings
 
if not sys.warnoptions:
    warnings.simplefilter("ignore")
headers = {'accept-language':'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'}
dsaqwe = 'Adqw'
request = []
all_emails = []
blacklist = ['@mail.ru']
WORDS = 80#Кол-во слов для автогенерации
start = 0
end = 100
min_subs = 15000
max_subs = 250000
 
def wnd() -> Optional[uuid.UUID]:
    try:
 
        txt = subprocess.check_output("wmic csproduct get uuid").decode()
 
        match = re.search(r"\bUUID\b[\s\r\n]+([^\s\r\n]+)", txt)
        if match is not None:
            txt = match.group(1)
            if txt is not None:
 
                txt = re.sub(r"[^0-9A-Fa-f]+", "", txt)
 
                if len(txt) == 32:
                    return uuid.UUID(txt)
    except:
        pass
 
    return None
 
def J():
    jsiask = NjOooJsj.get('https://ffxgamers1.wixsite.com/clients')
    boradaoCzaz = biusdjAKq(jsiask.content, 'html.parser')
    SozoaiwAJSk = boradaoCzaz.find('p', attrs={'class': 'font_9'}).text
    a = str(wnd())
    if a in SozoaiwAJSk:
        return True
    else:
        return True
 
def o():
    print(dsaqwe)
    time.sleep(8)
    sys.exit(0)
    
def save_error(exception, where):
    with open('errors_log.txt', 'a') as res_errors:
        res_errors.write(f'произошла ошибка - {exception} |{where}\n\n')
        res_errors.close()
 
class Parser():
    def _init__(self):
        pass
 
    def get_urls_to_pars(self, request):
        session = requests.Session()
        all_urls = []
        for j in request:
            try:
                urls_content = session.get(f'https://www.youtube.com/results?search_query={j}&sp=EgQIBBAB', headers=headers)
                urls_bs = bs(urls_content.text,'html.parser')
                urls = urls_bs.find_all('a', attrs={'dir':'ltr'})
                for i in urls:
                    if '/watch' in i['href']:
                        all_urls.append(i['href'])
            except (requests.exceptions.ProxyError, requests.exceptions.ConnectionError) as err:
                print(f'Ошибка с соединением. Возможно вы посылаете много запросов | {err}')
            except Exception as err1:
                save_error(err1, 'Ошибка во время сбора ссылок')
                continue
        return all_urls
 
    def pars_mails(self, urls, start, end):
        session = requests.Session()
 
        for i in range(start, end):
            try:
 
                email_content = session.get(f'https://www.youtube.com{urls[i]}', headers=headers)
                pattern = r"[\w\.-]+@[\w\.-]+"
                mail = re.search(pattern,email_content.text.replace("\\n", ""))
                if mail and mail[0] not in all_emails:
                    subs = bs(email_content.text,'html.parser')
                    subs_count = subs.find('span', attrs={'class':'yt-subscription-button-subscriber-count-branded-horizontal yt-subscriber-count'})
                    subi = subs_count["aria-label"]
 
                    channel_url = subs.find('meta', attrs={'itemprop':'channelId'}).get('content')
                    channel_url= 'https://www.youtube.com/channel/'+channel_url
                    if 'тыс' in subi and ',' in subi:
                        subi = int(subi[:subi.find(',')].replace("\xa0",''))*1000
                    elif 'тыс' in subi:
                        subi = int(subi[:subi.find('т')].replace("\xa0", ''))*1000
                    elif 'млн' in subi and ',' in subi:
                        subi = int(subi[:subi.find(',')].replace("\xa0",''))*1000000
                    elif 'млн' in subi:
                        subi = int(subi[:subi.find('м')].replace("\xa0", ''))*1000000
                    try:
                        subi = int(subi)
                    except:
                        pass
                    if subi<=max_subs and subi>=min_subs and mail[0] not in all_emails and '.' in mail[0]:
                        all_emails.append(mail[0])
                        for j in blacklist:
                            if j in mail[0]:
                                raise Exception
                        results = open('mails.txt', 'a')
                        results2 = open('mails_full.txt', 'a')
                        results3 = open('mails_db.txt', 'a')
                        print(f'subs - {subi}, email - {mail[0]}, url - {channel_url}')
                        try:
                            results.write(f'{mail[0]}\n')
                        except Exception as errorfile:
                            save_error(errorfile, 'Ошибка, связанна с файлом errorfile')
                            pass
                        try:
                            results2.write(f'=' * 15 + '\n')
                            results2.write(f'subs - {subi}, email - {mail[0]}, url = {channel_url}\n')
                            results2.write(f'=' * 15 + '\n')
                            results2.write('\n')
                        except Exception as errorfile2:
                            save_error(errorfile2, 'Ошибка, связанна с файлом errorfile2')
                            continue
                        try:
                            results3.write(f'{mail[0]}\n')
                        except Exception as error3:
                            save_error(error3, 'Ошибка, связанна с парсингом почт')
                            pass
                        results.close()
                        results2.close()
                        results3.close()
 
            except Exception as err:
                save_error(err, 'Ошибка, связанна с файлом errorfile')
                time.sleep(0.8)
                subi = 0
                channel_url = ''
                continue
 
    def get_words(self, num):
        current_words = []
        max_amount = 50
        while len(current_words) < num:
            try:
                random_word = random.choice(string.ascii_letters)
                if random_word.lower() == 'x':
                    max_amount = 7
                if random_word.lower() == 'z':
                    max_amount = 11
                if random_word.lower() == 'q':
                    max_amount = 19
                if random_word.lower() == 'd':
                    max_amount = 65
                if random_word.lower() == 'e':
                    max_amount = 52
                if random_word.lower() == 'j' or random_word.lower() == 'k' or random_word.lower() == 'y':
                    max_amount = 25
                if random_word.lower() == 'n' or random_word.lower() == 'u':
                    max_amount = 42
                if random_word.lower() == 'v':
                    max_amount = 33
                random_numb = random.randint(1, max_amount)
                url = f'https://www.babla.ru/английский-русский/{random_word}/{random_numb}'
                words_cn = requests.get(url, verify=False)
                wrds = bs(words_cn.content, 'html.parser')
                all_wrds = wrds.find('div', attrs={'class': 'container'}).find_all_next('li')
                words_in_page = []
                for i in all_wrds:
                    if 'Английский' in i.text and 'Русский' not in i.text:
                        words_in_page.append(i.text.replace('Английский', ''))
                for i in range(0, 3):
                    current_words.append(words_in_page[random.randint(0, len(words_in_page) - 1)])
                print(f'{len(current_words)} из {num}')
            except Exception as err:
                continue
        return current_words
 
 
if __name__ == '__main__':
    parse = Parser()
    print('Выберите режим работы: 1 - Автоматическая генерация слов и поиск почт, 2 - Загрузка слов из requests.txt [НЕ ЗАБУДЬТЕ СОЗДАТЬ файл requests.txt и записать туда слова для поиска, 3 - Бесконечный парсинг почт с ютуба')
    mode = input('')
    if mode == "1":
        while True:
            try:
                wrds_to_gen = int(input('Сколько слов сгенерировать?'))
                request = parse.get_words(wrds_to_gen)
                print(f'Удалось сгенерировать {len(request)} слов')
                break
            except:
                continue
    elif mode == "2":
        print('Загружаю ключевые слова из requests.txt...')
        try:
            f = open('requests.txt', encoding='utf-8')
            lines = f.readlines()
            num_lines = sum(1 for line in open('requests.txt', encoding='utf-8'))
            for i in range(num_lines):
                request.append(lines[i].replace('\n',''))
        except:
            print("Ошибка, возможно вы не создали файл requests.txt")
    elif mode =="3":
        print('Выбран режим бесконечного парсинга почт с ютуба...')
        while True:
            try:
                print('Генерирую слова для поиска, это может занять несколько минут...')
                request = parse.get_words(WORDS)
                print(request)
                print(f'Удалось сгенерировать {len(request)} слов')
                print('Собираю ссылки для парсинга...')
                urls = parse.get_urls_to_pars(request)
                print(f' собрал {len(urls)} ссылок')
                print('Начинаю искать почты...')
                THREADS = len(urls) // 100
                for index in range(THREADS):
                    threading.Thread(target=parse.pars_mails, args=(urls, start, end)).start()
                    start += 100
                    end += 100
                threading.Thread(target=parse.pars_mails, args=(urls, start, len(urls))).start()
                start = 0
                end = 100
                time.sleep(10)
            except Exception as error:
                save_error(error, 'Генеральная ошибка')
                print(error)
                time.sleep(3)
                start = 0
                end = 100
                continue
 
    print(request)
    print('Собираю ссылки для парсинга...')
    urls = parse.get_urls_to_pars(request)
    print(f' собрал {len(urls)} ссылок')
    print('Начинаю искать почты...')
    THREADS = len(urls)//100
    for index in range(THREADS):
        threading.Thread(target=parse.pars_mails, args=(urls, start, end)).start()
        start += 100
        end += 100
    threading.Thread(target=parse.pars_mails, args=(urls, start, len(urls))).start()
0
dadasayy
23.07.2020, 20:10
  #10

Не по теме:


На код что выше

Python
1
2
def _init__(self):
        pass
Вот это прикол.
Для приличия если уже используете (есть ли смысл ?), где второе нижнее подчеркивание перед 'init'
Название переменных. В одном месте типизация. Словарь, не слышали ? Даже страшно в таком коде копаться,
похоже на издевательство. То что он работал вообще уже магия

0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 3
23.07.2020, 20:45 11
От удаление этих строк результат не изменился((как не искал почты так и не ищет)ну все равно спасибо)
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 3
27.07.2020, 15:53 12
Подскажите хоть в каком направление двигаться?
0
27.07.2020, 15:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2020, 15:53
Помогаю со студенческими работами здесь

Посоветуйте плеер на Python для youtube и облака ?
IDLE (Python 3.10 64-bit) ------------------------ Нужен плееер который будет воспроизводить...

Парсер Python
Здравствуйте. Всех с наступающим Новым годом Есть код парсера на Python. Ответ от сервера 403. Как...

Парсер hh.ru на Python
Доброго времени суток. У меня при изучении Python возникла проблема, сижу ломаю голову. Парсер...

Парсер на Python
Пишу парсер для страницы https://www.regard.ru/catalog/tovar244993.htm/ Получилось спарсить данные...

Парсер на python
Мне нужен парсер, который бы доставал css стили с сайта, но чет все что нахожу - это парсинг html....

Парсер на Python
Здравствуйте. Решил написать простенький парсер на Питоне, но столкнулся с проблемой: не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru