Как разделить мой вывод на отдельные URL-адреса YouTube и поместить в список в Python3? - PullRequest
0 голосов
/ 24 марта 2019

Я хочу сделать простой скребок канала youtube с другого сайта, чтобы создать список контактов, ссылки на которые расположены на сайте youtube.

Использованные библиотеки: Beautifulsoup и запросы.

У меня возникли проблемы с извлечением только URL-адресов как одного объекта и помещением их в список.

Это моя первая программа после "Hello World" на Python, поэтому я все еще новичок.

Понятия не имею, что мне делать дальше

#----------------------------------------------------
#Libs
#----------------------------------------------------
from bs4 import BeautifulSoup
import requests

#----------------------------------------------------
#variables
#----------------------------------------------------
page = ('http://ranking.vstars.pl/?side=96&&sort=month_change')

#----------------------------------------------------                 
#functions
#----------------------------------------------------
def scraper():

    x=0

    target = requests.get(page)
    soup = BeautifulSoup(target.text, 'html.parser')

    for links in soup.find_all("td", "a", class_= "href"):
        print(links, '\n')
        x += 1

    print ("Number of links:" , x)

#----------------------------------------------------  
#codes
#----------------------------------------------------
scraper()
Output:

<td class="href"><a href="https://www.youtube.com/channel/UCq-EgxhHVTFWVZcjFwsfnWA" rel="nofollow" target="_blank">YouTube</a></td> 

...

<td class="href"><a href="https://www.youtube.com/channel/UCpcG5MwAks-At2L-gbSppag" rel="nofollow" target="_blank">YouTube</a></td> 

Number of links: 81

Ответы [ 3 ]

1 голос
/ 24 марта 2019

Поскольку вы хотели получить вывод типа List, я взял на себя смелость сохранить его в списке:

Код

#----------------------------------------------------
#Libs
#----------------------------------------------------
from bs4 import BeautifulSoup
import requests

#----------------------------------------------------
#variables
#----------------------------------------------------
page = ('http://ranking.vstars.pl/?side=96&&sort=month_change')

#----------------------------------------------------
#functions
#----------------------------------------------------
def scraper():

    x=0

    target = requests.get(page)
    soup = BeautifulSoup(target.text, 'html.parser')

    all_links = []
    for links in soup.find_all("td", "a", class_= "href"):
        all_links.append(links.contents[0].attrs['href'])
        x += 1

    print(all_links)
    print ("Number of links:" , x)

#----------------------------------------------------
#codes
#----------------------------------------------------
scraper()

Вывод

[u 'https://www.youtube.com/channel/UCq-EgxhHVTFWVZcjFwsfnWA', u' https://www.youtube.com/channel/UCPf-3giVvdU55kIBN2CbLRQ', ...]

('Количество ссылок:', 81)

0 голосов
/ 24 марта 2019

Попробуйте это:

import re
import urllib.request

from bs4 import BeautifulSoup


def getLinks(url):
   x = 0
   html_page = urllib.request.urlopen(url)
   soup = BeautifulSoup(html_page, 'html.parser')
   links = []

   for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
      links.append(link.get('href'))
      x = x + 1

     print(links,x)

return links

getLinks("http://google.com")
0 голосов
/ 24 марта 2019

Измените свою функцию:

def scraper():
    x=0
    target = requests.get(page)
    soup = BeautifulSoup(target.text, 'html.parser')

    for td in soup.find_all("td", class_= "href"):
        for links in td.find_all("a"):
            print(links['href'], '\n')
            x += 1

    print ("Number of links:" , x)
...