Python-Splash&BS4で映画のタイトルをスクレイプ
Nov 14 2020
Pythonで最初のスクリプトを作成しようとしています。SplashとBS4を使用しています。
私はジョンワトソンルーニーからのこのチュートリアルに従いました(しかし私自身のターゲットで):PythonでJAVASCRIPTウェブサイトをスクレイプする方法
私の目標はこのウェブサイトの調査をこすることです:2020年の最高の映画
これが私の問題です:それは同じタイトルを複数回レンダリングしますが、論理的な順序なしでリストに最大6つの重複があります。100行未満の場合もあれば、それ以上の場合もありますか?
私が欲しいもの:
- 注文により100タイトルを入手
- それらを.csv形式でエクスポートします。
これが私のコードです:
import requests
import csv
from bs4 import BeautifulSoup
url = 'https://www.senscritique.com/top/resultats/Les_meilleurs_films_de_2020/2582670'
r = requests.get('http://localhost:8050/render.html',
params={'url': url, 'wait': 2})
soup = BeautifulSoup(r.text, 'html.parser')
podium = soup.find_all('li', class_="elpo-item")
podium_list = []
for titres in podium:
for titles in soup.find_all('h2'):
podium_list.append(titles.text)
for liste in podium_list:
print(liste)
質問:
- 100タイトルのみを廃棄するにはどうすればよいですか?私は何を逃しましたか?
- 私のコードは正しいですか、どうすればそれを最適化できますか?
- Splashは私の使用に本当に適していますか、それともJS Webサイトを廃棄するための別の簡単なライブラリがありますか?
.csvの部分については、今すぐ自分で試してみるつもりですが、何かヒントがあれば、もちろん聞いています!
ご協力ありがとうございました。
回答
1 baduker Nov 14 2020 at 19:07
ページは実際には動的に読み込まれ、少なくとも次の50本の映画が読み込まれるため、別のエンドポイントにリクエストを送信する必要があります。
方法は次のとおりです。
import requests
from bs4 import BeautifulSoup
headers = {
"Referer": "https://www.senscritique.com/top/resultats/Les_meilleurs_films_de_2020/2582670",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
titles = []
for page in range(1, 3):
url = f"https://www.senscritique.com/sc2/top/resultats/2582670/page-{page}.ajax?limit=1000"
soup = BeautifulSoup(requests.get(url, headers=headers).text, "html.parser").find_all("li", {"class": "elpo-item"})
titles.extend(i.find("h2").getText(strip=True).replace("(2020)", "") for i in soup)
for title in titles:
print(title)
出力:
1917
Jojo Rabbit
The Gentlemen
Uncut Gems
Tenet
Le Cas Richard Jewell
Dark Waters
En avant
Drunk
Les Filles du docteur March
Adieu les cons
Invisible Man
Play
Les Enfants du temps
L'Adieu
La Plateforme
Séjour dans les monts Fuchun
The King of Staten Island
Été 85
Birds of Prey (et la Fantabuleuse Histoire de Harley Quinn)
La Communion
and so on...
ちなみに、映画は整然としています。