最近、とても興味深い要望がありました。ある人は、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 サイトの他の関連記事を参照してください。