Веб-парсинг с красивым супом на питоне

Я хочу просканировать домашнюю страницу YouTube, чтобы вытащить все ссылки на видео. Ниже приведен код

from bs4 import BeautifulSoup
import requests

s='https://www.youtube.com/'
html=requests.get(s)
html=html.text

s=BeautifulSoup(html,features = "html.parser")

for e in s.find_all('a',{'id':'video-title'}):
    link=e.get('href')
    text=e.string
    print(text)
    print(link)
    print()

Когда я запускаю приведенный выше код, ничего не происходит. Похоже, что идентификатор не обнаруживается. Что я делаю неправильно

5 способов использования оповещений, предупреждений, ошибок, сообщений об успехе в Bootstrap
5 способов использования оповещений, предупреждений, ошибок, сообщений об успехе в Bootstrap
Bootstrap - это популярный front-end фреймворк, который делает веб-разработку проще и быстрее. Использование Bootstrap растет по мере того, как все...
Библиотека Bootstrap
Библиотека Bootstrap
Bootstrap - это бесплатный набор инструментов для разработки веб-приложений с открытым исходным кодом, разработанный компанией Twitter. Написанный на...
HTML И VS CODE Для Веб-разработки
HTML И VS CODE Для Веб-разработки
Прежде чем начать кодировать html в "VS CODE", мы должны сначала создать папку и назвать ее x.html, здесь я принимаю x как имя файла, который мы...
Красиво оформленное веб-приложение для отправки HTML писем на PHP
Красиво оформленное веб-приложение для отправки HTML писем на PHP
В современный цифровой век маркетинг электронной почты играет жизненно важную роль в успехе любого бизнеса, а создание красиво оформленных HTML-писем...
Раскройте весь потенциал вашего проекта Angular с помощью экспертного знания команд Angular CLI
Раскройте весь потенциал вашего проекта Angular с помощью экспертного знания команд Angular CLI
Angular - это популярный JavaScript-фреймворк для создания веб-приложений. Одной из ключевых особенностей Angular является его мощный интерфейс...
Соскабливание и загрузка изображений Google с помощью Python
Соскабливание и загрузка изображений Google с помощью Python
Растущая распространенность веб-скрейпинга значительно расширила области его использования. Многие приложения искусственного интеллекта сегодня...
0
0
1 108
4

Ответы 4

Это потому, что вы не получаете тот же HTML, что и ваш браузер.

import requests
from bs4 import BeautifulSoup


s =  requests.get("https://youtube.com").text

soup = BeautifulSoup(s,'lxml')

print(soup)

Сохраните вывод этого кода в файл с именем test.html и запустите. Вы увидите, что он не совпадает с браузером, так как выглядит поврежденным.

См. Эти вопросы ниже.

HTML в браузере не соответствует очищенным данным в Python

Запросы Python не дают мне тот же HTML, что и в моем браузере

В принципе, я рекомендую вам использовать Selenium Webdriver, поскольку он работает как браузер.

Да, это странный очиститель, но если вы очистите его на уровне 'div id = "content"', вы сможете получить запрашиваемые данные. Мне удалось получить заголовки каждого видео, но похоже, что на YouTube есть ограничение по скорости или дросселирование, поэтому я не думаю, что вы сможете получить ВСЕ заголовки и ссылки. Во всяком случае, вот что я получил, работая над названиями:

import requests
from bs4 import BeautifulSoup

url = 'https://www.youtube.com/'
response = requests.get(url)
page = response.text
soup = BeautifulSoup(page, 'html.parser')
links = soup.find_all('div', id='content')

for each in links:
    print(each.text)

Разве нам не нужно указывать идентификатор в виде словаря, например {'id': 'content'}

Nikhil Rathore 31.07.2018 11:53

Может быть, это поможет очистить все видео с домашней страницы YouTube,

    from bs4 import BeautifulSoup
    import requests

    r = 'https://www.youtube.com/'
    html = requests.get(r)

    all_videos = []

    soup = BeautifulSoup(html.text, 'html.parser')
    for i in soup.find_all('a'):
        if i.has_attr('href'):
            text = i.attrs.get('href')
            if text.startswith('/watch?'):
                urls = r+text
                all_videos.append(urls)
    print('Total Videos', len(all_videos))
    print('LIST OF VIDEOS', all_videos)

Этот фрагмент кода выберет все ссылки с домашней страницы youtube.com, которые содержат /watch? в своем атрибуте href (ссылки на видео):

from bs4 import BeautifulSoup
import requests

soup = BeautifulSoup(requests.get('https://www.youtube.com/').text, 'lxml')

for a in soup.select('a[href* = "/watch?"]'):
    print('https://www.youtube.com{}'.format(a['href']))

Печать:

https://thewikihow.com/video_pBhkG2Zwf-c
https://thewikihow.com/video_pBhkG2Zwf-c
https://thewikihow.com/video_gnn7GwqXek4
https://thewikihow.com/video_gnn7GwqXek4
https://thewikihow.com/video_AMKDVfucPfA
https://thewikihow.com/video_AMKDVfucPfA
https://thewikihow.com/video_daQcqPHx9uw
https://thewikihow.com/video_daQcqPHx9uw
https://thewikihow.com/video_V_MXGdSBbAI
https://thewikihow.com/video_V_MXGdSBbAI
https://thewikihow.com/video_KEW9U7s_zks
https://thewikihow.com/video_KEW9U7s_zks
https://thewikihow.com/video_EM7ZR5z3kCo
https://thewikihow.com/video_EM7ZR5z3kCo
https://thewikihow.com/video_6NPHk-Yd4VU
https://thewikihow.com/video_6NPHk-Yd4VU
https://thewikihow.com/video_dHiAls8loz4
https://thewikihow.com/video_dHiAls8loz4
https://thewikihow.com/video_2_mDOWLhkVU
https://thewikihow.com/video_2_mDOWLhkVU

...and so on

Другие вопросы по теме