Если вы хотите go на таких ссылках, я рекомендую другой подход:
используйте CSS Селекторы
Нет * Необходим модуль re
.
Обновление 1 для отладки
Если вы хотите увидеть суп, полученный по вашему запросу, вы можете сделать это здесь (см. Комментарий #DEBUG1
) или в Пример кода ниже (#DEBUG3
), чтобы увидеть, что вы получаете в качестве ингредиентов для супа, см. #DEBUG2
в примере кода ниже.
from bs4 import BeautifulSoup
#DEBUG1 print the soup.
# import sys
# print >> sys.stderr, soup.prettify() # python2.X
print(soup.prettify) # python3.X
# select button with location href at the beginning (you can add the class as well)
for item in soup.select("button[onclick^=\"location.href=\"]"):
# ... do stuff here, e.g.
onclick = item["onclick"]
href = onclick.split("=")[1]
# now href is 'https://d3spcaxyl0it1f.cloudfront.net/archive/123.mp4'
href = href.strip("'")
# the leading and trailing ' are gone.
if href.endswith(".mp4"):
# do stuff here or precise your css selector further
# ...
Почему вы должны использовать этот подход? Чтобы ваша кнопка действительно имела запрошенные атрибуты.
Почему это хорошо? Потому что вам не нужно проверять существование атрибута, используя сначала item.get('onclick')
, а затем действовать на основе этого решения.
Как вы получаете страницу в свой суп? (Прямая цитата от @ akore128 )
# import sys
import requests
from bs4 import BeautifulSoup
page = requests.get('http://www.example.com')
#DEBUG2
# print >> sys.stderr, page.text # python2.X
print(page.text) # python3.X
# Create a BeautifulSoup object
soup = BeautifulSoup(page.text, 'html.parser')
#DEBUG3 print the soup.
# print >> sys.stderr, soup.prettify() # python2.X
print(soup.prettify) # python3.X