Grattage du site Web officiel de GoToEat à Shizuoka, liste des magasins ciblés pour la campagne Izu
Dans l'article
import urllib.request
html = urllib.request.urlopen(url).read()
La même page s'affiche uniquement car la condition de recherche n'est pas spécifiée. Même lorsque la même URL est ouverte dans le navigateur, le contenu affiché est différent entre le nouveau et le second. Apparemment, il semble que Session soit jugée.
Alors j'ai cherché
Page immédiatement après avoir recherché "Izu City" https://premium-gift.jp/fujinokunigotoeat/use_store?events=search&id=&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=
Suivant (2ème page) https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=2&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=
Retour (1ère page) https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=1&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=
La différence entre la page immédiatement après la recherche et le retour (première page) semble être que l'URL a changé entre "events = search" et "events = page", et "id =" et "id = 1".
La différence entre le retour (1ère page) et la suivante (2ème page) est "id = 1" et "id = 2", donc j'ai trouvé que id est le nombre de pages.
Retour à l'essai (1ère page) Si vous commencez à partir de l'URL, les résultats de la recherche ne sont pas reflétés, donc le contenu affiché est différent.
Il semble que vous puissiez accéder dans l'ordre de
Quant à l'URL de la page suivante, j'ai trouvé l'URL dans le lien de la tête, alors utilisez ça, Si vous essayez d'obtenir la page suivante de la page immédiatement après la recherche, "id = 2", puis "id = 22", puis "id = 222" Une page avec 2 augmentés sera retournée (w)
import requests
from bs4 import BeautifulSoup
import time
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
with requests.Session() as s:
#Aucune recherche requise pour tout obtenir
# url = "https://premium-gift.jp/fujinokunigotoeat/use_store"
#En cas de recherche, accédez après avoir affiché une fois la page de recherche
s.get("https://premium-gift.jp/fujinokunigotoeat/use_store?events=search&id=&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=")
url = "https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=1&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry="
result = []
while True:
r = s.get(url, headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
for store in soup.select("div.store-card__item"):
data = {}
data["Nom du magasin"] = store.h3.get_text(strip=True)
for tr in store.select("table.store-card__table > tbody > tr"):
data[tr.th.get_text(strip=True).rstrip(":")] = tr.td.get_text(
strip=True
)
result.append(data)
tag = soup.select_one("head > link[rel=next]")
print(tag)
if tag:
url = tag.get("href")
else:
break
time.sleep(3)
import pandas as pd
df = pd.DataFrame(result)
#Confirmation du nombre d'inscriptions
df.shape
df.to_csv("shizuoka.csv", encoding="utf_8_sig")
#Confirmation en double
df[df.duplicated()]
df
Recommended Posts