요즘 아주 흥미로운 요구가 있었습니다. 한 사람이 CSV를 사용하여 한 곳에서 다른 곳으로 데이터를 마이그레이션하고 있었습니다. 데이터는 독서 프로젝트를 위한 도서 등록입니다. 어느 순간 그녀는 나에게 이렇게 말했습니다. “자, 이제 나머지 작업은 로봇을 위한 것입니다. 각 책의 ISBN을 알아내야 해요.” 그 말대로 로봇이 하는 일인데 로봇이 하게 하면 어떨까요?
Sigla para International Standard Book Number.로그인 후 복사
한 작품에 여러 ISBN이 있을 수 있는데, 이는 에디션마다 고유한 ISBN이 있기 때문입니다. 이 경우 미디어가 호환된다면 모든 ISBN이 작동합니다. CSV에는 다음 내용이 등록되었습니다.
-> 전자책
-> 육체적
-> 오디오
논리를 살펴보겠습니다.
-> CSV 파일을 업로드하고 엽니다.
-> 제목이 포함된 열을 추출합니다.
-> 미디어 열을 추출합니다.
-> 각 제목에 대해 Google에서 ISBN으로 검색하세요.
-> 페이지에서 제목을 추출하세요.
-> 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에는 공백이 없으므로 제목의 공백은 " "로 대체됩니다. 팬더에서는 "스프레드시트"를 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을 사용한 웹스크래핑: CSV를 데이터베이스로 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!