Web Crawler не работает на Youtube - PullRequest
0 голосов
/ 12 июня 2018

Я начал учиться программировать на python неделю или две назад.Я хотел создать что-то такое, в котором вы будете вводить название какой-либо песни, а затем программа будет возвращать ссылку на страницу поиска и ссылку на песню (по вдохновению бота, находящегося в раздоре).Я получил первую часть работы, ссылка на страницу поиска вернется просто отлично, но я не мог понять, как связать песню.Так что я подумал, что если бы я мог напечатать первый всплывающий заголовок видео, я был бы в порядке, так как в большинстве случаев первая ссылка является желаемой.Поэтому я сделал сканер, чтобы сканировать все ссылки на видео, а затем я бы вернул первый.Эта часть не работает ... Однако тот же код сканера работает для других веб-сайтов.Я не могу понять это ...

    from bs4 import BeautifulSoup
    import requests
    import urllib

    def milo():

          User_input = input("Title of Youtube vid - ")

          words = User_input.split()

          list = []

          list.append('+'.join(words))
          print("https://www.youtube.com/results?search_query=" + list[0])


          url = "https://www.youtube.com/results?search_query=" + list[0]

          source_code = requests.get(url)
          plain_text = source_code.text
          soup = BeautifulSoup(plain_text, 'html.parser')
          for link in soup.findAll('a',"video-title"):
              song = link.get('href')
              list.append('https://www.youtube.com' + song)
              print(list[0])



milo()

1 Ответ

0 голосов
/ 12 июня 2018

не используйте переменную list, потому что это зарезервированное слово Python, вместо этого вы можете использовать lst и попробовать это, это будет работать

# lst instead of list
lst = []

...

for link in soup.findAll('a',{'class':'yt-uix-tile-link'}):
    lst.append('https://www.youtube.com' + link.get('href'))
print(lst)

# if in inspect document don't find any of .class or #id for any of tags
# we need to get a `tag` that we need for example in our case it is `a`
# and after find our tag that we need and there will be all classes and tags that we need 
# bacause for example youtube make some tags hidden and we don't we it with inspect from chrome/firefox
for link in soup.findAll('a'):
    print(link)

Вывод

Title of Youtube vid - Roots
https://www.youtube.com/results?search_query=Roots
[
'Roots', 'https://www.youtube.com/watch?v=PUdyuKaGQd4', 
 # many other urls
 ...
'https://www.youtube.com/watch?v=eB4oFu4BtQ8'
]
...