> 백엔드 개발 > 파이썬 튜토리얼 > Python을 사용한 웹스크래핑: CSV를 데이터베이스로 사용

Python을 사용한 웹스크래핑: 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 파일을 업로드하고 엽니다.
-> 제목이 포함된 열을 추출합니다.
-> 미디어 열을 추출합니다.
-> 각 제목에 대해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿