python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250

需求分析

将爬取的数据导入到表格中,方便人为查看。

实现方法

三大功能

1,下载所有网页内容。

2,处理网页中的内容提取自己想要的数据

3,导入到表格中

分析网站结构需要提取的内容

代码

python 复制代码
import requests
from bs4 import BeautifulSoup
import pprint
import json
import pandas as pd
import time

# 构造分页数字列表
page_indexs = range(0, 250, 25)
list(page_indexs)

# 请求头
headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
}

# 下载所有的网页然后交给下一个函数处理
def download_all_htmls():
    htmls = []
    for idx in page_indexs:
        url = "https://movie.douban.com/top250?start={}&filter=".format(idx)
        print("craw html", url)
        r = requests.get(url, headers=headers)
        if r.status_code != 200:
            raise Exception("error")
        htmls.append(r.text)
        time.sleep(0.5)
    return htmls



# 解析HTML得到数据

def parse_single_html(html):
    # 使用BeautifulSoup处理网页,传入参数html,使用html.parser模式处理
    soup = BeautifulSoup(html, 'html.parser')

    # 使用BeautifulSoup匹配想要的内容,使用find函数
    article_items = (
        soup.find("div", class_="article")
            .find("ol", class_="grid_view")
            .find_all("div", class_="item")
    )
    datas = []

    # 内容比较多分步提取内容
    for article_item in article_items:
        rank = article_item.find("div", class_="pic").find("em").get_text()
        info = article_item.find("div", class_="info")
        title = info.find("div", class_="hd").find("span", class_="title").get_text()
        stars = (
            info.find("div", class_="bd")
                .find("div", class_="star")
                .find_all("span")

        )
        rating_star = stars[0]["class"][0]
        rating_num = stars[1].get_text()
        comments = stars[3].get_text()

        datas.append({
            "rank": rank,
            "title": title,
            "rating_star": rating_star.replace("rating", "").replace("-t", ""),
            "rating_num": rating_num,
            "comments": comments.replace("人评价", "")
        })
    return datas
    pprint.pprint()


if __name__ == '__main__':

    # 下载所有的网页内容
    htmls = download_all_htmls()
    # pprint.pprint(parse_single_html(htmls[0]))

    # 解析网页内容并追到all_datas的列表中
    all_datas = []
    for html in htmls:
        all_datas.extend(parse_single_html(html))


    # 使用pandas模块,批量导入到表格中
    df = pd.DataFrame(all_datas)
    df.to_excel("doubanTOP250.xlsx")

效果图



参考文章

https://www.bilibili.com/video/BV1CY411f7yh/?p=15

相关推荐
怕浪猫6 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
高洁016 小时前
具身智能中的世界模型训练
人工智能·python·深度学习·机器学习·transformer
无线通信科研笔记6 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
朝朝辞暮i6 小时前
VLA 系统学习第 1 课:VLA 到底在干什么?
人工智能·python·计算机视觉·vla
2601_962885727 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen7 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
北冥有鱼被烹7 小时前
VCSEL全景解析:与光模块NPO CPO的关系、市场量化分析与产业链影响
python
我可能是个假开发7 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong8 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
正在走向自律8 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas