Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)

Dinge die zu tun sind

Verwenden Sie Python, um die Big Camera-Website zu durchsuchen.

Erstellungshintergrund

Ich glaube nicht, dass es "gute Kratzartikel" gab. Ich habe ein Code- und Youtube-Video gemacht, um als Youtuber zu üben, das Hikakin übertrifft.

Video-Link

[Link] https://www.youtube.com/watch?v=SZuNFDzJndA&list=PLzPCqF-heFHyFb_aoqnXc8GrECL6yMdvZ

Umgebung

Erforderliche Fähigkeiten und Umgebung

Die Reaktion, die Sie durch diesen Code erhalten möchten

Vorsichtsmaßnahmen zum Schaben

Bitte seien Sie vorsichtig, wenn Sie auf eigenes Risiko kratzen, da Folgendes auftreten kann. Fall der Zentralbibliothek der Stadt 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

Wenn die Site-Benutzeroberfläche der großen Kamera geändert wird, besteht eine hohe Wahrscheinlichkeit, dass sie nicht funktioniert Bitte kommentieren Sie, wenn es nicht funktioniert. Kann korrigiert werden.

Der ganze Code vorerst

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):
    """
Eine Funktion, die ein schönes Objekt mit einer URL zurückgibt
    """
    res = requests.get(url)
    return bs(res.content, "html.parser")


def next_url(res_bs):
    """
HTML-Daten(res_bs)Eine Funktion, die auf der nächsten Seite URL oder Keine zurückgibt
    """
    domain = "https://www.biccamera.com/"
    for res in res_bs.findAll(class_="bcs_l"):
        if "Nächster" 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):
    """
Funktion zum Abrufen von DataFrame von HTML mit großen Kameras
    """

    #Erstellen Sie eine leere Liste
    output = []

    #Informationen zur Produktliste erhalten Sie in HTML
    item_list = res_bs.findAll(class_=re.compile(r"prod_box sku*"))

    # item_Holen Sie sich Produktinformationen nacheinander aus der Liste
    for num, item in enumerate(item_list):
        #URL mit Produktdetails abrufen
        item_url = item.find(class_="cssopa").get("href")
        #Produkttitel abrufen
        title = item.find(class_="cssopa").find("img").get("alt")
        #Produktfotoerfassung
        picture = item.find(class_="cssopa").find("img").get("src")
        #Erworbener Produkthersteller
        maker = item.find(class_="bcs_maker").text
        #Produktpreis erhalten
        price = item.find(class_=re.compile(r"bcs_price*")).text
        #Erhalten Sie Punktinformationen, falls vorhanden, und erhalten Sie 0, wenn nicht
        if item.find(class_="bcs_point"):
            point = item.find(class_="bcs_point").text
        else:
            point = "0"
        #Erhalten Sie, wenn es Inventarinformationen gibt, erhalten Sie 0, wenn nicht
        if item.find(class_=re.compile(r"label_*")):
            stock = item.find(class_=re.compile(r"label_*")).text
        else:
            stock = "0"
        #Wenn Informationen zur Bewertungsnummer vorhanden sind, erhalten Sie 0, wenn nicht
        if item.find(class_="bcs_star"):
            ratings = item.find(class_="bcs_star").find("a").text
        else:
            ratings = "0"
        #Informationen zum Liefertermin erhalten, falls verfügbar, andernfalls 0
        if item.find(class_="bcs_ship"):
            terms = item.find(class_="bcs_ship").text
        else:
            terms = "no ship info"
        #Geben Sie die Informationen für jedes oben erworbene Produkt aus(list)Anhängen(hinzufügen)Machen
        output.append({
            "item_url": item_url,
            "title": title,
            "picture": picture,
            "maker": maker,
            "price": price,
            "point": point,
            "stock": stock,
            "ratings": ratings,
            "terms": terms,
        })
    #Speichern Sie alle Informationen in der Ausgabe und speichern Sie die Ausgabe im Pandas-Datenrahmen
    df = pd.DataFrame(output)
    return df


def get_product_list(url, pages=10):
    """
Nach Eingabe der Ziel-URL, Seitenübergang,
Eine Funktion, die alle Produktlisteninformationen als Datenrahmen zurückgibt
    """

    #Erstellen Sie einen leeren Datenrahmen
    all_df = pd.DataFrame()

    for _ in range(pages):
        #Holen Sie sich HTML von der eingegebenen URL
        res_bs = get_html(url)

        #Holen Sie sich Datenrahmen von HTML
        df = product_df(res_bs)

        # all_Hänge den oben erstellten df an df an(hinzufügen)Machen
        all_df = all_df.append(df)

        # all_Drucken Sie die Anzahl der dfs und überprüfen Sie, ob sie hinzugefügt wurden
        print("all_df:", len(all_df))
        print(f"sleeping.....{_}Zeit")

        #Warten Sie 5 Sekunden, um eine Überlastung der anderen Site zu vermeiden
        time.sleep(5)

        #URL der nächsten Seite oder Keine abrufen
        url = next_url(res_bs)

        #Wenn url None ist, endet die for-Anweisung
        if url is None:
            print("break")
            break
            return all_df
    return all_df


if __name__ == "__main__":
    #Definieren Sie die URL, die die Daten enthält, die Sie abrufen möchten
    url = "https://www.biccamera.com/bc/category/?q=laptop&rowPerPage=100#bcs_resultTxt"

    #Alle Seitenübergänge und Daten werden erfasst
    df = get_product_list(url)

    #Suchinformationen von der URL abrufen
    qs = urllib.parse.urlparse(url).query
    #Verwandeln Sie Suchinformationen in ein Wörterbuch
    kw = urllib.parse.parse_qs(qs)
    #Suchwort abrufen
    query = kw.get("q")[0]

    #Speichern Sie die erfassten Daten als CSV
    today = datetime.today().strftime("%Y%m%d_%H%M%S")
    df.to_csv(f"{today}_biccamera_{query}", index=False)

    #Durch Ersetzen der Seiten durch einen numerischen Wert (siehe unten) kann die Anzahl der Seitenübergänge auf das 20-fache geändert werden.
    # df = get_product_list(url, pages=20)

Impressionen

Ich werde den obigen Code nicht von Anfang an erklären. Wenn Sie interessiert sind, schauen Sie sich bitte das Video an.

Außerdem hat die große Kamera eine etwas höhere Kratzschwierigkeit (mit re.complile). Es ist ein gutes Unterrichtsmaterial, daher hoffe ich, dass Sie dieses Prinzip verstehen und Ihr Leben als Kratzer genießen.

Als Jugendlicher werde ich weiterhin Daten usw. vorverarbeiten, speichern und visualisieren. Wir werden erkennen, "lebe nach dem, was du magst".

Recommended Posts

Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Grundlagen der Python-Scraping-Grundlagen
der Zen von Python
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
python jupyter notebook Meisterschaft zur Datenvorverarbeitung (Zielort: große Kamera)
Die Website von "The Hitchhiker's Guide to Python" wurde vollständig übersetzt.
[Python] Lassen Sie uns die URL der Django-Administrator-Site ändern
Scraping das Ergebnis von "Schedule-Kun"
Auf dem Weg zum Ruhestand von Python2
Über die Funktionen von Python
Die Kraft der Pandas: Python
Kratzen Sie die reCAPTCHA-Site jeden Tag automatisch ab (1/7: Aufbau der Python-Umgebung)
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Holen Sie sich vergangene Leistung von Läufern von Python Scraping Pferderennen Website
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
Turm von Hanoi - Retrospektiv / Nicht rekursiv (Python Edition)
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Überprüfung der Grundlagen von Python (FizzBuzz)
Praktische Version zur Automatisierung des Testens von Flutter-Apps mit Appium (Python)
Informationen zur Grundlagenliste der Python-Grundlagen
[Python-Scraping] Geben Sie die URL und den Titel der Site mit einem bestimmten Schlüsselwort in eine Textdatei ein
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Ändern Sie die Länge der Python-CSV-Zeichenfolgen
Übergeben Sie den Pfad des importierten Python-Moduls
Notizen vom Anfang von Python 1 lernen
Scraping des Nutzungsverlaufs des Community-Zyklus
Überprüfen Sie die Existenz der Datei mit Python
Informationen zur virtuellen Umgebung von Python Version 3.7
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Ich kannte die Grundlagen von Python nicht
Das Ergebnis der Installation von Python auf Anaconda
[Python] Probieren Sie pydash der Python-Version von lodash aus
[Python] Überprüfen Sie den Speicherverbrauch von Variablen
Überprüfen Sie den Pfad des importierten Python-Moduls
Die Geschichte der Manipulation globaler Python-Variablen
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Jeden Tag automatisch die reCAPTCHA-Site abkratzen (2/7: Scraping)
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Die Python-Projektvorlage, an die ich denke.
Scraping von einer authentifizierten Site mit Python
Ich habe versucht, Yahoo Wetter zu kratzen (Python Edition)
Auf der Suche nach dem schnellsten FizzBuzz in Python
Python-Grundkurs (Ende 15)
Legen Sie den Prozessnamen des Python-Programms fest
[Python] Ruft den Zeichencode der Datei ab
Die Geschichte der Verarbeitung A von Blackjack (Python)
Lernen Sie intuitiv die Umformung von Python np
Python Hinweis: Die geheime Rolle von Kamma
Notizen vom Anfang von Python 2 lernen
Japanische Übersetzung: PEP 20 - Das Zen von Python
[Python3] Grundlegendes zu Dateivorgängen
[Scraping] Python-Scraping
Holen Sie sich den Inhalt von Git Diff aus Python