>  기사  >  백엔드 개발  >  Python에서 크롤러의 실제 사용: Douban 북 크롤러

Python에서 크롤러의 실제 사용: Douban 북 크롤러

WBOY
WBOY원래의
2023-06-11 13:33:072161검색

Python은 오늘날 가장 인기 있는 프로그래밍 언어 중 하나이며 데이터 과학, 인공 지능, 네트워크 보안 등 다양한 분야에서 널리 사용되었습니다. 그 중 Python은 웹 크롤러 분야에서 좋은 성능을 발휘하고 있으며, 많은 기업과 개인이 데이터 수집 및 분석을 위해 Python을 사용하고 있습니다. 이 기사에서는 Python을 사용하여 Douban 도서 정보를 크롤링하는 방법을 소개하고 독자가 Python 웹 크롤러의 구현 방법 및 기술에 대한 사전 이해를 돕습니다.

먼저 Douban 도서 정보 크롤러를 위해서는 Python에서 두 가지 중요한 라이브러리인 urllib와 beautifulsoup4를 사용해야 합니다. 그 중 urllib 라이브러리는 주로 네트워크 요청 및 데이터 읽기에 사용되는 반면 beautifulsoup4 라이브러리는 HTML, XML 등 구조화된 문서를 구문 분석하여 필요한 정보를 추출하는 데 사용할 수 있습니다. 이러한 라이브러리를 사용하기 전에 먼저 pip 명령을 사용하여 설치를 완료해야 합니다. 설치가 완료되면 실제 전투를 시작할 수 있습니다.

  1. 크롤링 대상 결정

Python을 사용하여 크롤링할 때는 먼저 크롤링 대상을 명확히 해야 합니다. 이 기사의 목표는 책 제목, 저자, 출판사, 출판 날짜, 등급 등과 같은 Douban 도서에 대한 기본 정보를 크롤링하는 것입니다. 또한 여러 페이지의 도서 정보를 크롤링해야 합니다.

  1. HTML 구조 분석

크롤링 대상을 결정한 후에는 Douban Books의 HTML 구조를 추가로 분석하여 필요한 정보의 위치와 특성을 결정해야 합니다. Chrome이나 Firefox와 같은 브라우저와 함께 제공되는 개발자 도구를 사용하여 페이지 소스 코드를 볼 수 있습니다. HTML 구조를 관찰함으로써 크롤링해야 할 태그와 속성을 찾은 다음 이를 구현하기 위한 Python 코드를 작성할 수 있습니다.

  1. 코드 작성

다음으로 Python으로 Douban 북 크롤러 코드를 작성합니다. 코드의 핵심은 다음과 같습니다.

  • 네트워크 요청을 보내고 HTML 페이지를 가져옵니다.
  • HTML 문서를 구문 분석하고 필요한 정보를 추출합니다.
  • 스토리지 데이터.

다음은 전체 코드입니다.

import urllib.request
from bs4 import BeautifulSoup

url = 'https://book.douban.com/top250'
books = []

def get_html(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'}
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def parse_html(html):
    soup = BeautifulSoup(html,'html.parser')
    book_list_soup = soup.find('div', attrs={'class': 'article'})
    for book_soup in book_list_soup.find_all('table'):
        book_title_soup = book_soup.find('div', attrs={'class': 'pl2'})
        book_title_link = book_title_soup.find('a')
        book_title = book_title_link.get('title')
        book_url = book_title_link.get('href')
        book_info_soup = book_soup.find('p', attrs={'class': 'pl'})
        book_info = book_info_soup.string.strip()
        book_rating_num_soup = book_soup.find('span', attrs={'class': 'rating_nums'})
        book_rating_num = book_rating_num_soup.string.strip()
        book_rating_people_num_span_soup = book_soup.find('span', attrs={'class': 'pl'})
        book_rating_people_num = book_rating_people_num_span_soup.string.strip()[1:-4]
        book_author_and_publish_soup = book_soup.find('p',attrs={'class':'pl'}).next_sibling.string.strip()
        book_author_and_publish = book_author_and_publish_soup.split('/')
        book_author = book_author_and_publish[0]
        book_publish = book_author_and_publish[-3]
        book_year = book_author_and_publish[-2]
        books.append({
        'title': book_title,
        'url': book_url,
        'info': book_info,
        'author':book_author,
        'publish':book_publish,
        'year':book_year,
        'rating_num':book_rating_num,
        'rating_people_num':book_rating_people_num
        })

def save_data():
    with open('douban_top250.txt','w',encoding='utf-8') as f:
        for book in books:
            f.write('书名:{0}
'.format(book['title']))
            f.write('链接:{0}
'.format(book['url']))
            f.write('信息:{0}
'.format(book['info']))
            f.write('作者:{0}
'.format(book['author']))
            f.write('出版社:{0}
'.format(book['publish']))
            f.write('出版年份:{0}
'.format(book['year']))
            f.write('评分:{0}
'.format(book['rating_num']))
            f.write('评分人数:{0}

'.format(book['rating_people_num']))

if __name__ == '__main__':
    for i in range(10):
        start = i*25
        url = 'https://book.douban.com/top250?start={0}'.format(start)
        html = get_html(url)
        parse_html(html)
    save_data()

코드 분석:

먼저 기본 웹 사이트 URL과 빈 목록 도서(도서 정보를 저장하는 데 사용)를 정의합니다. 다음으로, 요청을 보내고 HTML 페이지를 얻기 위해 get_html 함수를 작성합니다. 이 함수에서는 웹사이트의 차단을 피하기 위해 요청을 보내는 브라우저를 시뮬레이션하기 위해 요청 헤더를 설정했습니다. urllib 라이브러리의 Request 메소드를 사용하여 요청 헤더와 URL을 객체로 캡슐화한 다음 urllib 라이브러리의 urlopen 메소드를 사용하여 네트워크 요청을 보내고 페이지를 얻은 다음 마지막으로 read 및 decode 메소드를 사용하여 페이지 콘텐츠를 utf-8 형식으로 변환합니다.

HTML 문서를 구문 분석하고 필요한 정보를 추출하기 위해 parse_html 함수를 작성합니다. 이 함수에서는 beautifulsoup4 라이브러리의 find 및 find_all 메소드를 사용하여 HTML 페이지의 요구 사항을 충족하는 태그와 속성을 찾습니다. 구체적으로 Douban 도서의 HTML 구조를 관찰하여 각 도서의 테이블 태그와 해당 도서 제목, 링크, 정보, 등급 및 기타 정보를 찾아 이 데이터를 추출하는 코드를 작성했습니다. 그중에서 우리는 문자열을 처리하여 불필요한 공백 문자를 제거하고 문자열을 분할하는 방법을 스트립 및 분할 방법을 사용했습니다.

마지막으로 추출된 책 정보를 로컬 파일에 저장하는 save_data 함수를 작성했습니다. 이 함수에서는 Python에 내장된 open 함수를 사용하여 텍스트 파일을 열고, 쓰기 모드에서 파일 내용을 쓰고, format 메서드를 사용하여 각 책의 관련 정보를 문자열로 형식화하여 파일에 씁니다. 파일 내용이 왜곡되지 않도록 하려면 파일 이름 뒤에 인코딩='utf-8'을 추가해야 합니다.

메인 프로그램에서는 for 루프를 사용하여 Douban Books의 처음 250권의 책을 크롤링합니다. 이를 위해서는 페이지당 25권의 도서를 크롤링해야 하며 총 10페이지를 크롤링해야 합니다. 각 루프에서 현재 페이지 번호를 기반으로 필요한 URL을 계산하고 get_html 함수를 호출하여 HTML 페이지를 얻습니다. 다음으로 페이지를 구문 분석하고 필요한 정보를 추출하는parse_html 함수에 페이지를 전달합니다. 마지막으로 save_data 함수를 호출하여 모든 책 정보를 로컬 파일에 저장합니다.

  1. 코드 실행

코드 작성이 완료된 후 명령줄(Windows 시스템)이나 터미널(MacOS 또는 Linux 시스템)에서 코드가 있는 디렉터리에 들어가서 python3 크롤러 스크립트 이름 명령을 실행하면 됩니다. .py를 사용하여 Python 웹 크롤러를 실행합니다. 프로그램이 실행되는 동안 프로그램의 출력 정보를 관찰하여 프로그램이 올바르게 실행되었는지 확인할 수 있습니다. 프로그램이 실행된 후 로컬 파일 douban_top250.txt를 확인하여 데이터가 성공적으로 저장되었는지 확인할 수 있습니다.

요약

이 글의 도입을 통해 우리는 Python 웹 크롤러의 구현 방법과 기술에 대한 사전 이해를 가졌습니다. 구체적으로, 우리는 Python의 urllib 및 beautifulsoup4 라이브러리를 사용하여 Douban Books 웹사이트의 HTML 구조를 기반으로 Douban Books 정보를 크롤링하는 Python 프로그램을 작성하고 데이터 수집 및 저장을 성공적으로 구현했습니다. 또한 실제 응용 프로그램에서는 IP 주소가 차단되는 것을 피하기 위해 동일한 웹 사이트에 너무 자주 요청을 보내지 않는 등 웹 크롤러에 대한 몇 가지 예방 조치를 이해해야 합니다.

위 내용은 Python에서 크롤러의 실제 사용: Douban 북 크롤러의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.