Python | 看看豆瓣Top250电影有哪些?

107 阅读1分钟

这段时间在学习Python ,练习一下,爬一下豆瓣Top250的电影有哪些?

思路

  • 需要知道一共有多少页
  • 爬单个页面数据处理
  • 分页爬取,循环一下单个页面数据处理就好了

代码

import requests
import re
from bs4 import BeautifulSoup
import json
import os

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}
url = 'https://movie.douban.com/top250'


def find_count():  # 找到页数,每页25个
    res = requests.get(url, headers=headers)
    if res.status_code == 200:
        soup = BeautifulSoup(res.text, features='lxml', from_encoding='utf-8')
        count = soup.select('.count')[0].string
        return [int(s) for s in re.findall(r'-?\d+\.?\d*', count)][0]


def handle_text(page_num):  # 处理函数
    res = requests.get(url + f'?start={page_num}', headers=headers)
    list = []
    if res.status_code == 200:
        soup = BeautifulSoup(res.text, features='lxml', from_encoding='utf-8')
        pic = soup.select('.pic')
        for k in range(0, len(pic)):
            index = pic[k].find('em').string
            imgs = pic[k].find('img').attrs
            list.append(
                {"index": index,  "name": imgs['alt'], "img": imgs['src']})
        return list


# 如果存在文件,则删除
if os.path.exists('./douban.json'):
    os.remove('./douban.json')
# 获取需要请求的次数
count = int(find_count() / 25)
# 开始处理数据
result = []
for k in range(count):
    result_item = handle_text(k*25)
    for i in result_item:
        result.append(i)
# 保存文件
fs = open('./douban.json', 'a', encoding='utf-8')
fs.write(json.dumps(result, ensure_ascii=False))
fs.close()

结论

最后会在同一个文件夹下面生成一个douban.json的数组对象。

传送门:nodejs版本

本文由mdnice多平台发布