Utilisez python pour gratter le site Web de Big Camera.
Je ne pense pas qu'il y ait eu de "bons articles de grattage" J'ai fait un code et une vidéo Youtube pour pratiquer en tant que Youtuber qui surpasse Hikakin.
[Lien] https://www.youtube.com/watch?v=SZuNFDzJndA&list=PLzPCqF-heFHyFb_aoqnXc8GrECL6yMdvZ
Ce qui suit peut se produire, alors soyez prudent lorsque vous grattez à vos propres risques. Étui de la bibliothèque centrale d'Okazaki url : https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6
De plus, si l'interface utilisateur du site de la grande caméra est modifiée, il y a de fortes chances que cela ne fonctionne pas, donc Veuillez commenter si cela ne fonctionne pas. Peut être corrigé.
scraping_biccamera.py
from bs4 import BeautifulSoup as bs
from datetime import datetime
import pandas as pd
import requests
import urllib
import time
import re
def get_html(url):
"""
Une fonction qui renvoie un bel objet avec une URL
"""
res = requests.get(url)
return bs(res.content, "html.parser")
def next_url(res_bs):
"""
données html(res_bs)Une fonction qui renvoie url ou None sur la page suivante
"""
domain = "https://www.biccamera.com/"
for res in res_bs.findAll(class_="bcs_l"):
if "Suivant" in res.text:
if res.find("a"):
next_url = domain + res.find("a").get("href")
return next_url
return None
def product_df(res_bs):
"""
Fonction pour obtenir DataFrame à partir de la grande caméra html
"""
#Créer une liste vide
output = []
#Obtenir des informations sur la liste de produits à partir de HTML
item_list = res_bs.findAll(class_=re.compile(r"prod_box sku*"))
# item_Obtenez des informations sur les produits une par une à partir de la liste
for num, item in enumerate(item_list):
#Obtenir l'URL des détails du produit
item_url = item.find(class_="cssopa").get("href")
#Obtenir le titre du produit
title = item.find(class_="cssopa").find("img").get("alt")
#Acquisition de photos de produits
picture = item.find(class_="cssopa").find("img").get("src")
#Fabricant de produits acquis
maker = item.find(class_="bcs_maker").text
#Obtenez le prix du produit
price = item.find(class_=re.compile(r"bcs_price*")).text
#Obtenez des informations sur les points s'il y en a, obtenez 0 sinon
if item.find(class_="bcs_point"):
point = item.find(class_="bcs_point").text
else:
point = "0"
#Obtenir s'il y a des informations d'inventaire, obtenir 0 sinon
if item.find(class_=re.compile(r"label_*")):
stock = item.find(class_=re.compile(r"label_*")).text
else:
stock = "0"
#Obtenir s'il y a des informations sur le numéro d'évaluation, obtenir 0 sinon
if item.find(class_="bcs_star"):
ratings = item.find(class_="bcs_star").find("a").text
else:
ratings = "0"
#Obtenez des informations sur la date de livraison si disponible, obtenez 0 sinon
if item.find(class_="bcs_ship"):
terms = item.find(class_="bcs_ship").text
else:
terms = "no ship info"
#Sortie des informations pour chaque produit acquis ci-dessus(list)Ajouter à(ajouter à)Faire
output.append({
"item_url": item_url,
"title": title,
"picture": picture,
"maker": maker,
"price": price,
"point": point,
"stock": stock,
"ratings": ratings,
"terms": terms,
})
#Enregistrez toutes les informations dans la sortie et stockez la sortie dans le cadre de données pandas
df = pd.DataFrame(output)
return df
def get_product_list(url, pages=10):
"""
Après avoir entré l'URL cible, la transition de page,
Une fonction qui renvoie toutes les informations de la liste de produits sous forme de dataframe
"""
#Créer un dataframe vide
all_df = pd.DataFrame()
for _ in range(pages):
#Obtenez du code HTML à partir de l'URL saisie
res_bs = get_html(url)
#Obtenir le dataframe à partir du HTML
df = product_df(res_bs)
# all_ajouter le df créé ci-dessus à df(ajouter à)Faire
all_df = all_df.append(df)
# all_Imprimer le nombre de dfs et vérifier qu'ils sont ajoutés
print("all_df:", len(all_df))
print(f"sleeping.....{_}Temps")
#Attendez 5 secondes pour éviter de surcharger l'autre site
time.sleep(5)
#URL de la page suivante ou aucune acquisition
url = next_url(res_bs)
#Si url est None, l'instruction for se termine
if url is None:
print("break")
break
return all_df
return all_df
if __name__ == "__main__":
#Définissez l'URL contenant les données que vous souhaitez récupérer
url = "https://www.biccamera.com/bc/category/?q=laptop&rowPerPage=100#bcs_resultTxt"
#Toutes les pages de transition et les données sont acquises
df = get_product_list(url)
#Obtenir des informations de recherche à partir de l'URL
qs = urllib.parse.urlparse(url).query
#Transformez les informations de recherche en dictionnaire
kw = urllib.parse.parse_qs(qs)
#Obtenir le mot de recherche
query = kw.get("q")[0]
#Enregistrez les données acquises au format csv
today = datetime.today().strftime("%Y%m%d_%H%M%S")
df.to_csv(f"{today}_biccamera_{query}", index=False)
#En substituant une valeur numérique aux pages comme indiqué ci-dessous, le nombre de transitions de page peut être changé à 20 fois.
# df = get_product_list(url, pages=20)
Je n'expliquerai pas le code ci-dessus depuis le début, donc si vous êtes intéressé, veuillez regarder la vidéo.
En outre, la grande caméra a une difficulté de grattage légèrement plus élevée (en utilisant re.complile), C'est un bon matériel pédagogique, alors j'espère que vous comprendrez ce principe et que vous apprécierez votre vie de grattage.
En tant que youtubeur, je continuerai à prétraiter, enregistrer et visualiser les données, etc. Nous réaliserons "vivre par ce que vous aimez".
Recommended Posts