Выскабливание Reelgood.com в python с Beautifullsoup

#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)