#python #web-scraping #beautifulsoup
Вопрос:
Я пытаюсь создать скребок (на Python) для веб-сайта ReelGood.com.
Если я перейду к определенному фильму на Reelgood, он покажет мне кнопку воспроизведения, такую как эта: Кнопка потоковой передачи
Если я нажму на эту кнопку, она перенаправит меня, например, на https://www.netflix.com/title/70232180 теперь я хотел бы очистить этот конкретный URL-адрес. поэтому я подумал, что создам небольшой скрипт на python, чтобы очистить все ссылки, которые содержат https://netflix.com/x.
поэтому я придумал это:
from bs4 import BeautifulSoup
import requests
URL = "https://reelgood.com/movie/the-intouchables-2011"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
for a_href in soup.find_all("a", href=True):
print(a_href["href"])
теперь это дает мне распечатку всех ссылок, но нет ссылок, содержащих URL-адрес, на который я перенаправлен.
у кого-нибудь есть идея, как выплюнуть Netflix.com url?
Ответ №1:
Чтобы отфильтровать ссылки , которые содержат только https://www.netflix.com/
ссылки , вы можете использовать CSS-селектор: a[href*="https://www.netflix.com/"]
, который выберет все a
href
ссылки, содержащие https://www.netflix.com/
.
from bs4 import BeautifulSoup
import requests
URL = "https://reelgood.com/movie/the-intouchables-2011"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
for a_href in soup.select('a[href*="https://www.netflix.com/"]'):
print(a_href["href"])
Выход:
https://www.netflix.com/watch/70232180
Комментарии:
1. Спасибо за вашу помощь, но если вы запустите скрипт, он не найдет URL-адрес Netflix. в то время как это должно быть где-то там
2. @JohnDoe Это работает на меня. Появляется ли оно, когда вы это делаете
print(soup.prettify())
?3. Мой плохой, и где правильно для этого примера это работает.
Ответ №2:
Я думаю, что вы можете использовать мой код, чтобы адаптировать его к вашим потребностям
из selenium import webdriver из selenium.webdriver.chrome.options импортирует параметры из selenium.webdriver.support.ui импорт WebDriverWait время импорта из geopy.geocoders импорт номинального времени импорта из pprint импорт pprint
# instantiate a new Nominatim client
app = Nominatim(user_agent="tutorial")
def getLocation():
#autoriser le naviagateur pour acceder à l'emplacement actuelle par defaut,
# Si on essaye d'accéder à un site Web : « https://mycurrentlocation.net » via chrome,
# il demande d'autoriser l'accès à la localisation. La commande « - use-fake-ui-for-media-stream »
# accordera toutes les autorisations pour l'emplacement, le microphone, etc. automatiquement.
options = Options()
options.add_argument("--use-fake-ui-for-media-stream")
# appelez la page Web https://mycurrentlocation.net/ et attendez 20 secondes que la page se charge.
timeout = 20
#Pour chromedriver il faut avoir la meme version que google chrome
driver = webdriver.Chrome(executable_path = './chromedriver.exe', chrome_options=options)
#driver = webdriver.Chrome(executable_path = './chromedriver.exe', chrome_options=options) -> on peut mettre ça a la palce
driver.get("https://mycurrentlocation.net/")
wait = WebDriverWait(driver, timeout)
time.sleep(3)
#Trouvez le XPath des éléments de latitude et de longitude mentionnés sur la page Web puis copier le nom de la classe qu'on souhaite récupérer
neighborhood = driver.find_elements_by_xpath('//*[@id="neighborhood"]')
neighborhood = [x.text for x in neighborhood]
neighborhood = str(neighborhood[0])
regionname = driver.find_elements_by_xpath('//*[@id="regionname"]')
regionname = [x.text for x in regionname]
regionname = str(regionname[0])
placename = driver.find_elements_by_xpath('//*[@id="placename"]')
placename = [x.text for x in placename]
placename = str(placename[0])
driver.quit()
return (neighborhood,regionname,placename)
neighborhood,regionname,placename=getLocation()
print("le résultat est : n ",
neighborhood,regionname,placename)