Поиск идентификатора видео на сайте html с использованием python - PullRequest
0 голосов
/ 03 июля 2018

Я очищаю HTML-файл, на каждой странице есть видео, а в HTML есть идентификатор видео. Я хочу распечатать идентификатор видео.

Я знаю, что если я хочу напечатать заголовок из класса div, я бы сделал это

with open('yeehaw.html') as html_file:
   soup = BeautifulSoup(html_file, 'lxml')

article = soup.find('div', class_='article')
headline = article.h2.a.text
print headline

Однако идентификатор видео находится внутри data-id = 'qe67234' Я не знаю, как получить доступ к этому «qe67234» и распечатать его.

пожалуйста, помогите спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Предполагая, что идентификатор данных находится в div

BeautifulSoup.find возвращает найденный HTML-элемент в виде словаря. Поэтому вы можете перемещаться по нему, используя стандартные средства, чтобы получить доступ к тексту (как вы сделали в своем вопросе), а также к HTML-тегам (как показано в коде ниже)

soup = BeautifulSoup('<div class="_article" data-id="qe67234">')
soup.find("div", {"class":"_article"})['data-id']

Обратите внимание, что часто для элементов видео требуется JS для воспроизведения, и вы не сможете найти необходимый элемент, если он был очищен с помощью не-JavaScript-клиента (т.е. python requests).

Если это произойдет, вы должны использовать такие инструменты, как браузер phantomjs + selenium, чтобы объединить веб-сайт с javascript для выполнения анализа.

EDIT Если сам тег data-id не является константой, вам следует обратиться к библиотеке lxml для замены BeautifulSoup и использовать значения xpath, чтобы найти нужный вам элемент

0 голосов
/ 03 июля 2018

Предполагается, что тег для идентификатора данных начинается с div:

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup('<div class="_article" data-id="qe67234"></div>')
results = soup.findAll("div", {"data-id" : re.compile(r".*")})
print('output: ', results[0]['data-id'])

# output: qe67234 
...