python之爬取豆瓣Top250数据

该代码实现从豆瓣电影Top250列表中抓取电影的标题、链接、图片、评分、评价人数和描述等信息,使用正则表达式解析HTML内容,并将数据存储到Excel表格中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import re
import ssl
import urllib  # 制定url,获取网页数据
import urllib.request

# xwlt是一个帮助我们写入一个excel表的库
import xlwt
from bs4 import BeautifulSoup

# 忽略https证书
ssl._create_default_https_context = ssl._create_unverified_context

# 标题
findTitle = re.compile(r'<span class="title">(.*?)</span>', re.S)
# 解析数据
# findLink = r'<a href="(.*?)">'
# 链接
findLink = re.compile(r'<a href="(.*?)">')
# 图片
findImg = re.compile(r'<img.*src="(.*?)"', re.S)  # re.S让换行符包含其中
# 其他内容
findOther = re.compile(r'<p class="">(.*)</p>', re.S)  # re.S让换行符包含其中
# 评分
findRate = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findCom = re.compile(r'<span>(\d*?)人评价</span>')
# 描述
findDes = re.compile(r'<span class="inq">(.*?)</span>')

savePath = "豆瓣电影Top250.xls"
dataList = []


def getData(baseUrl):
    for i in range(0, 10):
        url = baseUrl + str(i * 25)
        html = askUrl(url)
        # print(html)
        resolving(html)
    #         解析数据
    return dataList


# 请求数据
def askUrl(url):
    html = ""
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
        }
        req = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
        # print(html)
        return html
    except urllib.error.HTTPError as e:
        if hasattr(e, "code"):  # 如果包含code标签则打印出来
            print(e.code)
        if hasattr(e, "reason"):  # 如果包含reason标签则打印出来
            print(e.reason)
    return html


# 解析数据
def resolving(html):
    bs = BeautifulSoup(html, "html.parser")
    for item in bs.find_all("div", class_="item"):
        data = []
        # print("每一个条目数据", item)
        # print(type(item))
        item = str(item)
        title = re.findall(findTitle, item)
        if len(title) >= 2:
            data.append(title[0])
            data.append(title[1])
        else:
            data.append(title[0])
            data.append(' ')

        data.append(findRule(findLink, item))

        data.append(findRule(findImg, item))
        # other = findRule(findOther, item)
        # data.append(other)
        data.append(findRule(findRate, item))
        data.append(findRule(findCom, item))
        data.append(findRule(findDes, item))

        dataList.append(data)
    return dataList


# 保存数据到excel中
def saveExcel(dataList):
    # 创建一个excel表,编码用utf-8
    workbook = xlwt.Workbook(encoding="utf-8")
    # 创建一个excel文档中的sheet1文件
    worksheet = workbook.add_sheet('豆瓣电影')
    # 在sheet1中的第0行,第一列写入 你好,excel

    col = ("标题", "其他标题", "链接", "图片", "评分", "评价人数", "描述")
    for i in range(0, len(col)):
        worksheet.write(0, i, col[i])
    for i in range(0, len(dataList)):
        item = dataList[i]
        for j in range(0, len(item)):
            worksheet.write(i + 1, j, item[j])
    # 保存excle文档在本地,起名叫做movie.xls
    workbook.save('movie.xls')


def findRule(rule, msg):
    list = re.findall(rule, msg)
    # if (len(list)) >= 1:
    #     return list[0]
    # else:
    #     return " "

    return list


def start():
    getData("https://movie.douban.com/top250?start=")
    saveExcel(dataList)


start()

Python爬取豆瓣Top250电影数据并进行可视化是一个常见的实战项目,通常包括以下几个步骤: 1. **安装所需库**:首先需要安装`requests`库用于发送HTTP请求获取网页内容,`BeautifulSoup`或`lxml`库解析HTML,以及`pandas`处理数据和`matplotlib`或`seaborn`进行数据可视化。 ```python pip install requests beautifulsoup4 pandas matplotlib seaborn ``` 2. **编写爬虫脚本**:使用`requests.get()`函数获取豆瓣Top250页面的HTML源码,然后使用如BeautifulSoup解析提取需要的数据,比如电影名称、评分、导演、演员等信息。 ```python import requests from bs4 import BeautifulSoup url = 'https://movie.douban.com/top250' response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') data = [] # 解析并收集数据... ``` 3. **数据清洗**:由于网页抓取的数据可能包含HTML标签或其他非结构化信息,需要对数据进行清洗,将提取到的信息转化为标准格式,存储到`pandas` DataFrame中。 ```python for item in soup.find_all('div', class_='hd'): title = item.find('span', class_='title').text rating = float(item.find('span', class_='rating_num')['class'][0][6:]) # ...其他属性处理 data.append([title, rating]) ``` 4. **数据存储**:将清洗后的数据保存到CSV文件或数据库(如SQLite)中,便于后续分析。 5. **数据可视化**:利用`matplotlib`或`seaborn`绘制条形图、饼图或直方图展示评分分布、电影排名等情况。 ```python import matplotlib.pyplot as plt plt.figure(figsize=(12, 6)) plt.hist(data['评分'], bins=range(1, 11), edgecolor='black') plt.xlabel('评分') plt.ylabel('电影数量') plt.title('豆瓣Top250电影评分分布') plt.show() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值