콩짜개 인터넷 도서 TOP 250 정보

8263 단어
콩짜개 망 도서 TOP 250 의 정 보 를 얻 으 려 면 책 이름, 책의 링크, 작가, 출판사 와 출판 시간, 책의 가격, 평가 와 평 가 를 포함 하고 기어 오 른 데 이 터 를 로 컬 파일 에 저장 해 야 한다.
참조 사이트 주소:https://book.douban.com/top250
메모: 정규 표현 식 을 사용 할 때 Elements 옵션 에서 원본 코드 를 직접 보지 마 십시오. 원본 코드 가 자바 script 렌 더 링 을 거 쳐 원본 요청 과 다 를 수 있 으 므 로 Network 옵션 에서 원본 코드 를 봐 야 합 니 다.
import re
import json
import time
import requests
from requests.exceptions import RequestException


def get_one_page(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) '
            + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None
    
    
def parse_one_page(html, start):
    #.*?      
    items1 = re.findall('href="(.*?)".*?title="(.*?)".*?', html)
    items2 = re.findall('pl">(.*?\/)?(.*?\/)?(.*?)\/(.*?)\/(.*?)', html)#()?       
    items3 = re.findall('nums">(.*?).*?(.*?)?', html, re.S)#       
    #re.S .             
    for i in range(25):
        yield{
            'page': start//25+1,
            'ranking': start+i+1,
            'book': items1[i][1],
            'link': items1[i][0],
            
            'author': items2[i][0].replace('/', '').strip(),
            'press': items2[i][2].strip(),
            'time': items2[i][3].strip(),
            'price': items2[i][4].strip(),
            
            'grade': items3[i][0],
            #             
            'evaluation': items3[i][1].strip().replace("
", '')\ .replace('


', '') } def write_to_file(content): with open('doubanBookTop250.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '
') def main(start): url = 'https://book.douban.com/top250?start=' + str(start) html = get_one_page(url) for item in parse_one_page(html, start): print(item) #write_to_file(item) if __name__ == '__main__': for i in range(10): main(start=i * 25) time.sleep(1)

좋은 웹페이지 즐겨찾기