Как найти все ссылки, которые содержат 2 или 3 слова в теге, используя Beautiful Soup в Python - PullRequest
0 голосов
/ 27 мая 2018

Я извлекаю iframe с веб-сайта, используя Beautifulsoup iframes = soup.find_all ('iframe'). Я хочу найти все теги src в этих iframes, которые содержат 2 или 3 слова. Допустим, у меня есть ссылка src, похожая на эту"https://xyz.co/embed/TNagkx3oHj8/The.Tale.S001.true.72p.x264-QuebecRules" я знаю, как извлечь ссылки, содержащие слово «xyz»

srcs = []
 iframes = soup.find_all('iframe')
            for iframe in iframes:
                try:
                    if iframe['src'].find('xyz')>=0: srcs.append(iframe['src'])                 
                except KeyError: continue

мой вопрос, как извлечь все ссылки, содержащие 2 слова, такие как «xyz» и «true» или 3 словаэто как фильтр, если эти 2 слова не существуют в этой ссылке, не выбрасывайте их

1 Ответ

0 голосов
/ 27 мая 2018

Вы можете использовать пользовательскую функцию , чтобы проверить, содержит ли src все нужные слова.

Например, вы можете использовать что-то вроде этого:

soup.find_all('iframe', src=lambda s: all(word in s for word in ('xyz', 'true')))

Демонстрация:

html = '''
    <iframe src="https://xyz.co/embed/TNagkx3oHj8/The.Tale.S001.true.72p.x264-QuebecRules">...</iframe>
    <iframe src="foo">...</iframe>
    <iframe src="xyz">...</iframe>
    <iframe src="xyz.true">...</iframe>
'''

soup = BeautifulSoup(html, 'html.parser')
iframes = soup.find_all('iframe', src=lambda s: all(word in s for word in ('xyz', 'true')))
print(iframes)

Вывод:

[<iframe src="https://xyz.co/embed/TNagkx3oHj8/The.Tale.S001.true.72p.x264-QuebecRules">...</iframe>, <iframe src="xyz.true">...</iframe>]

Примечание:

Если какой-либо из тегов <iframe> не содержит атрибута src, вышеуказанная функция вызовет ошибку.В этом случае измените функцию на:

soup.find_all('iframe', src=lambda s: s and all(word in s for word in ('xyz', 'true')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...