当前位置: 首页 > news >正文

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

爬取豆瓣电影top250

需求分析

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

实现方法

三大功能
1,下载所有网页内容。
2,处理网页中的内容提取自己想要的数据
3,导入到表格中

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

在这里插入图片描述

代码

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

相关文章:

  • Gin 框架之用户密码加密
  • 汽车芯片「新变量」
  • Elasticsearch各种高级文档操作3
  • python/c++ Leetcode题解——2744. 最大字符串配对数目
  • AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案
  • go获取文件md5值不正确的问题记录
  • 基于springboot+vue的图书个性化推荐系统(前后端分离)
  • 爬虫入门学习(二)——response对象
  • 【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态
  • Kafka框架详解
  • Hive数据定义(1)
  • C#学习教程
  • 【论文阅读】Relation-Aware Graph Transformer for SQL-to-Text Generation
  • java数据结构与算法刷题-----LeetCode59. 螺旋矩阵 II
  • 【02】mapbox js api加载arcgis切片服务
  • Python数据分析案例33——新闻文本主题多分类(Transformer, 组合模型) 模型保存
  • 如何避免知识付费小程序平台的陷阱?搭建平台的最佳实践
  • Webpack5入门到原理12:处理 Html 资源
  • linux上面hadoop配置集群
  • 现阶段Python和Java哪个更吃香?
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 因操纵乙烯价格再遭诉讼,科莱恩等四家企业被陶氏索赔60亿
  • 中华人民共和国和巴西联邦共和国关于强化携手构建更公正世界和更可持续星球的中巴命运共同体,共同维护多边主义的联合声明
  • “水运江苏”“航运浙江”,江浙两省为何都在发力内河航运?
  • 广州地铁十一号线赤沙车辆段工程高坠事故调查报告公布:1人重伤且漏报
  • 飙升至熔断,巴基斯坦股市两大股指收盘涨逾9%