コードを何度も何度も何度も繰り返すことなく、美しいスープを使って1つのウェブサイトから複数の異なるページ(たとえばロンドン)をクロールする方法を知りたいと思います。Pythonでウェブサイトから複数のページをクロールする
私の目標は、理想的には、まず以下では1つの都市
に関連するすべてのページをクロールすることで、私のコード:
session = requests.Session()
session.cookies.get_dict()
url = 'http://www.citydis.com'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = session.get(url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
metaConfig = soup.find("meta", property="configuration")
jsonUrl = "https://www.citydis.com/s/results.json?&q=Paris& customerSearch=1&page=0"
response = session.get(jsonUrl, headers=headers)
js_dict = (json.loads(response.content.decode('utf-8')))
for item in js_dict:
headers = js_dict['searchResults']["tours"]
prices = js_dict['searchResults']["tours"]
for title, price in zip(headers, prices):
title_final = title.get("title")
price_final = price.get("price")["original"]
print("Header: " + title_final + " | " + "Price: " + price_final)
出力は、次のいずれかです。
Header: London Travelcard: 1 Tag lang unbegrenzt reisen | Price: 19,44 €
Header: 105 Minuten London bei Nacht im verdecklosen Bus | Price: 21,21 €
Header: Ivory House London: 4 Stunden mittelalterliches Bankett| Price: 58,92 €
Header: London: Themse Dinner Cruise | Price: 96,62 €
それが与えます私は最初のページ(4結果)の結果のみを返しますが、私はロンドンのすべての結果を得たいと思います(200以上の結果が必要です)
私に助言をいただけますか?私は推測、私はjsonURLのページをカウントアップするために持っていますが、それをさらに一歩取得することができ、ヘルプ、 - 私に
感謝を
UPDATEを行う方法がわかりません。
この場合、1ページ(ページ= 0)しかクロールできませんが、最初の10ページをクロールしたいと思います。コードから
関連スニペット:
soup = bs4.BeautifulSoup(response.content, "html.parser")
metaConfig = soup.find("meta", property="configuration")
page = 0
while page <= 11:
page += 1
jsonUrl = "https://www.citydis.com/s/results.json?&q=Paris& customerSearch=1&page=" + str(page)
response = session.get(jsonUrl, headers=headers)
js_dict = (json.loads(response.content.decode('utf-8')))
for item in js_dict:
headers = js_dict['searchResults']["tours"]
prices = js_dict['searchResults']["tours"]
for title, price in zip(headers, prices):
title_final = title.get("title")
price_final = price.get("price")["original"]
print("Header: " + title_final + " | " + "Price: " + price_final)
- 私はすべて一つの特定のページに戻って結果を取得ではなく、したがって、私のアプローチは、次のようになります。それに加えて私は1つのエラーメッセージを返す。これは私がすべての結果を返さない理由と関連していますか?
出力:ヘルプ
ウェブページを正しくクロールするには、 'xpaths'が必要です。.itは、あなたが上でやっていることの最大5行で、あなたのコードをもっと少なくするでしょう。それは、クロールと擦り傷に関連する何かを行うためのスタンダードの方法です。 – anekix
情報ありがとうございます。試してみる。それにもかかわらず、私が使用している方法で上記の問題にどのように取り組むことができるか、いくつかのフィードバックを私に提供することができますか? –