ホームページ > バックエンド開発 > Python チュートリアル > Python による Web スクレイピング: CSV をデータベースとして使用する

Python による Web スクレイピング: CSV をデータベースとして使用する

Mary-Kate Olsen
リリース: 2024-12-30 09:09:09
オリジナル
563 人が閲覧しました

Webscraping com Python: usando CSV como base de dados

最近、とても興味深い要望がありました。ある人は、CSV を使用してある場所から別の場所にデータを移行していました。データは読書プロジェクトの書籍登録です。ある時点で、彼女は私にこう言いました。「さあ、残りの作業はロボットのためです。各タイトルの ISBN を取得する必要があります。」彼女が言ったように、それはロボットの仕事なので、ロボットにやらせたらどうでしょうか?

Sigla para International Standard Book Number. 
ログイン後にコピー

作品には複数の ISBN を含めることができます。これは、各エディションに独自の ISBN があるために発生します。この場合、メディアに互換性があれば、どの ISBN でも機能します。 CSVには以下が登録されました:
->電子ブック
->物理的
->オーディオ

ロジックを見てみましょう:
-> CSV ファイルをアップロードして開きます。
->タイトルの列を抽出します。
->メディア列を抽出します。
->各タイトルについて、ISBN で Google で検索してください。
->ページからタイトルを抽出します。
-> ISBN のリストを抽出します。
->メディアのリストを抽出します。
->登録メディアを確認し、最も近い ISBN を検索します。基準が見つからない場合は、リストの最初の項目を返します。
->後の検証のために、どのメディアから ISBN を取得したかを通知します。

必要なライブラリを見てみましょう:

import requests # para fazer as requisições
from bs4 import BeautifulSoup # para manipular o html recebido
import pandas as pd # para manipular os arquivos CSV
import time
import random # as duas são para gerarmos intervalos aleatórios de acesso
ログイン後にコピー

この書籍リストには 600 件以上の項目が含まれており、Google にブロックされたくないため、より人間的なスペースでランダム アクセスを行う予定です。また、ヘッダーを使用して、ページのブラウザー バージョンが必要であることを示します。これを行うには、ブラウザで「ネットワーク」に移動し、「User-Agent」を検索します。

Google で検索するには、次の URL パターンを使用します:

url_base = "https://www.google.com/search?q=isbn" # o que vem depois '=' é a pesquisa
ログイン後にコピー

URL にはスペースが含まれないことに注意してください。そのため、タイトル内のスペースは「 」に置き換えます。 pandas では、「スプレッドシート」は DataFrame と呼ばれ、その略語として df が使用されるのが非常に一般的です。最後に、おそらくあなたも私と同じように Windows を使用しているでしょう。その場合、システム アドレス バーは Unix に比べて重視されます。貼り付けた URL を取得し、それを他の形式に反転する関数を作成しましょう。

path = r"C:\caminho\livros.csv"

def invert_url_pattern(url):
    return url.replace("\","/")

path = invert_url_pattern(path)

def search_book(path):
    url_base = "https://www.google.com/search?q=isbn"
    headers = {
    "User-Agent":"seu pc"
    }
    
    df = pd.read_csv(path, encoding='utf-8')
    books = df["Name"].tolist()
    media = df["media"].tolist()
    # vamos colocar as pesquisas aqui e depois inserir todas no DataFrame
    title_books = []
    isbn_books = []
    media_books = []  

    for index, book in enumerate(books):
        time.sleep(random.uniform(60, 90))
        
        url = url_base + "+" + book.replace(" ", "+")
        req = requests.get(url, headers=headers)

        site = BeautifulSoup(req.text, "html.parser")
        #usamos as class para buscar o conteúdo
        title = site.find("span", class_="Wkr6U")
        isbns = site.find_all("div", class_="bVj5Zb")
        medias = site.find_all("div", class_="TCYkdd")
        #se algo falhar, retornamos uma string vazia
        if(title.text == None):
            title_books.append("")
            isbn_books.append("")
            media_books.append("")
            continue

        # No loop, o último item acessado será o mais recente, 
        # pois percorremos a lista de cima para baixo. 
        # Por isso, invertendo a lista de ISBNs, garantimos que 
        # o mais novo de cada categoria seja processado por último.

        isbns = isbns[::-1]
        unified_data = {}

        for i in range(len(medias)):
            unified_data[medias[i].text] = isbns[i].text

        match media[index]:
            case "ebook":
                isbn_books.append(unified_data["Livro digital"])
                media_books.append("Livro digital")
            case "fisical":
                isbn_books.append(unified_data["Livro capa dura"])
                media_books.append("Livro capa dura")
            case "audio":
                isbn_books.append(unified_data["Audiolivro"])
                media_books.append("Audiolivro")
            case _:
                isbn_books.append(unified_data[0])
                media_books.append("")

        title_books.append(title.text)

    df["Titulo do Livro"] = title_books
    df["ISBN"] = isbn_books
    df["Tipo de Livro"] = media_books

    return df
ログイン後にコピー

さて、テストの準備はすべて整いました!テストできるように、私が受け取ったもののサンプル行を残しておきます。

Name language media
this other eden ?? english audio
df = search_book(path)

df.to_csv(invert_url_pattern("C:seu\caminho\para\salvar\nome_do_arquivo.csv"), encoding='utf-8', index=False)
ログイン後にコピー

この記事があなたのお役に立ち、日常生活で何かを自動化できることを願っています!

以上がPython による Web スクレイピング: CSV をデータベースとして使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート