python извлечение текста из iframe - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в Beautifulsoup, я пытаюсь извлечь некоторые необработанные данные с этого сайта, я сделал анализ.

from urllib.request import urlopen
from bs4 import BeautifulSoup
path='https://www.esquire.com/entertainment/tv/g28380481/best-anime-2019/'
f = urlopen(path)
html = str(f.read())
soup = BeautifulSoup(html, 'html.parser')
txt = soup.find_all('iframe')

Я получил этот объект bs4

[<iframe allowfullscreen="true" data-src="//www.youtube.com/embed/6M7f41OJfcM?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/0glqBjvku84?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/YKJf876thxw?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/SdFgPGSmy0Y?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/Ie-bo3IulmY?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/ApLudqucq-s?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/FpRk3m3Y-Zg?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/J9tu253SOas?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/lCPf9SA4mgU?enablejsapi=1" frameborder="0"></iframe>,
 <iframe allowfullscreen="true" data-src="//www.youtube.com/embed/neqxQdpTyXE?enablejsapi=1" frameborder="0"></iframe>]

Теперь я пытаюсь извлечь сайты из каждого элемента, я пробовал использовать этот код ниже. Я бы знал, какие команды Beautifulsoup использовать вместо замены каждого элемента в строке при выполнении поиска.

import re
trailers=[]
pattern='(www.+1)'
for line in txt:
  line=str(line)
  trailers.append(re.search(pattern,line).group(0))

trailers
['www.youtube.com/embed/6M7f41OJfcM?enablejsapi=1',
 'www.youtube.com/embed/0glqBjvku84?enablejsapi=1',
 'www.youtube.com/embed/YKJf876thxw?enablejsapi=1',
 'www.youtube.com/embed/SdFgPGSmy0Y?enablejsapi=1',
 'www.youtube.com/embed/Ie-bo3IulmY?enablejsapi=1',
 'www.youtube.com/embed/ApLudqucq-s?enablejsapi=1',
 'www.youtube.com/embed/FpRk3m3Y-Zg?enablejsapi=1',
 'www.youtube.com/embed/J9tu253SOas?enablejsapi=1',
 'www.youtube.com/embed/lCPf9SA4mgU?enablejsapi=1',
 'www.youtube.com/embed/neqxQdpTyXE?enablejsapi=1']

как я могу использовать здесь атрибуты для извлечения имен?

<span class="listicle-slide-hed-text">Fruits Basket (Funimation)</span>,
<span class="listicle-slide-hed-text">One Punch Man (Hulu)</span>,
<span class="listicle-slide-hed-text">Rilakkuma and Kaoru (Netflix)</span>,
<span class="listicle-slide-hed-text">Mob Psycho 100 II (Crunchyroll)</span>,
<span class="listicle-slide-hed-text">Ride Your Wave (July release at Fantasia Fest)</span>,
<span class="listicle-slide-hed-text">The Promised Neverland (Hulu)</span>,
<span class="listicle-slide-hed-text">Vinland Saga (Amazon Prime)</span>,
<span class="listicle-slide-hed-text">Boogiepop Never Laughs (Crunchyroll)</span>,
<span class="listicle-slide-hed-text">Saga of Tanya the Evil (Crunchyroll)</span>,
<span class="listicle-slide-hed-text">Dororo (Amazon Prime)</span>

1 Ответ

0 голосов
/ 25 марта 2020

Здесь нет необходимости использовать регулярные выражения.

Гораздо проще может быть использование свойства attrs элементов Beautifulsoup, например:

from urllib.request import urlopen
from bs4 import BeautifulSoup
path='https://www.esquire.com/entertainment/tv/g28380481/best-anime-2019/'
f = urlopen(path)
html = str(f.read())
soup = BeautifulSoup(html, 'html.parser')
txt = soup.find_all('iframe')

for element in txt:    
    print(element.attrs["data-src"][2:])

, которое дает те же результаты :

www.youtube.com/embed/6M7f41OJfcM?enablejsapi=1
www.youtube.com/embed/0glqBjvku84?enablejsapi=1
www.youtube.com/embed/YKJf876thxw?enablejsapi=1
www.youtube.com/embed/SdFgPGSmy0Y?enablejsapi=1
www.youtube.com/embed/Ie-bo3IulmY?enablejsapi=1
www.youtube.com/embed/ApLudqucq-s?enablejsapi=1
www.youtube.com/embed/FpRk3m3Y-Zg?enablejsapi=1
www.youtube.com/embed/J9tu253SOas?enablejsapi=1
www.youtube.com/embed/lCPf9SA4mgU?enablejsapi=1
www.youtube.com/embed/neqxQdpTyXE?enablejsapi=1

Подробнее об обработке атрибутов можно прочитать здесь: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...