Найти - Пользователи
Полная версия: Не срабатывает скрипт парсер поиска в ютубе
Начало » Python для новичков » Не срабатывает скрипт парсер поиска в ютубе
1 2
satfan
 # -*- coding: utf-8 -*-
import urllib
from urllib import request
from urllib.parse import quote
import re, os, sys
def findyoutube(x):
    mas=[]
    sq='http://www.youtube.com/results?search_query='+quote(x)
    doc = urllib.request.urlopen(sq).read().decode('cp1251',errors='ignore')
    match = re.findall("\?v\=(.+?)\"", doc)
    if not(match is None):
        for ii in match:
            if(len(ii)<25):
                mas.append(ii)
    mas=dict(zip(mas,mas)).values()
    mas2=[]
    for y in mas: mas2.append('http://www.youtube.com/watch?v='+y)
    return mas2
print(findyoutube('болонская+удочка'))
uf4JaiD5
satfan
Не срабатывает скрипт парсер поиска в ютубе
А что именно не срабатывает?

satfan
.decode('cp1251'
Ютуб кому-то отдаёт cp1251? Тут наверняка должно быть ‘utf-8’.

satfan
mas=dict(zip(mas,mas)).values()
Это чтобы от повторяющихся значений избавиться что ли? Круто.
Но проще в множество (set) данные положить.

Предлагаю переписать так:
 #
from urllib import request
from urllib.parse import quote
import re
def findyoutube(x):
	sq='http://www.youtube.com/results?search_query='+quote(x)
	doc = request.urlopen(sq).read().decode('utf-8',errors='ignore')
	match = re.findall("\?v\=(.+?)\"", doc)
	mas = ['http://www.youtube.com/watch?v='+i for i in set(match) if len(i)<25]
	return mas
satfan
Уважаемый uf4JaiD5.
Спасибо за помощь. Я только начинаю.
=================================
Выдало это:
Traceback (most recent call last):
File “C:\Documents and Settings\Admin\Рабочий стол\Копия Делаем парсер youtube\video.py”, line 2, in <module>
import request
ImportError: No module named request
====================================================
Модуль ставил так:
C:\Python27\python.exe -m pip install bs4
Romissevd
для python 2.7 попробуй
 from urllib import urlopen
Romissevd
Попробуй так
 import urllib
import re, os, sys
def findyoutube(x):
    mas=[]
    sq='http://www.youtube.com/results?search_query='+quote(x)
    doc = urllib.urlopen(sq).read().decode('cp1251',errors='ignore')
    match = re.findall("\?v\=(.+?)\"", doc)
    if not(match is None):
        for ii in match:
            if(len(ii)<25):
                mas.append(ii)
    mas=dict(zip(mas,mas)).values()
    mas2=[]
    for y in mas: mas2.append('http://www.youtube.com/watch?v='+y)
    return mas2
print(findyoutube('болонская+удочка'))
satfan
Спасибо за поддержку Romissevd
У меня версия 2.7
Ваш вариант даёт:
============================
Traceback (most recent call last):
File “C:\Documents and Settings\Admin\Рабочий стол\Копия Делаем парсер youtube\123.py”, line 16, in <module>
print(findyoutube('болонская+удочка'))
File “C:\Documents and Settings\Admin\Рабочий стол\Копия Делаем парсер youtube\123.py”, line 5, in findyoutube
sq='http://www.youtube.com/results?search_query='+quote(x)
NameError: global name ‘quote’ is not defined
Romissevd
 sq='http://www.youtube.com/results?search_query='+urllib.quote(x)
satfan
Уважаемый Romissevd
Всё сработало. Просто супер.
1.Только все ссылки без названия видео.
2. Скрипт не создал текстовый файл.

Romissevd
satfan
1.Только все ссылки без названия видео.
тут нужно смотреть, что приходит к тебе на разбор и что ты из этого извлекаешь
satfan
2. Скрипт не создал текстовый файл.
твой скрипт не создает текстовый файл
satfan
Спасибо.
Я в скрипт вставил:
# -*- coding: utf-8 -*-
Стал искать правильно.
===================
Помоги с этими вопросами:
1.Только все ссылки без названия видео.
2. Скрипт не создал текстовый файл.
===========================
Делаю так:
———————————-
output = open(“output.txt”, ‘w’)
print(lalala, file=output)
output.close()
———————————-
Ошибка: После слова – file= выделилось красным
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