使用BeautifulSoup方法抓取豆瓣电影信息

本博客介绍了一个Python脚本,该脚本使用requests和BeautifulSoup库从豆瓣电影Top250页面抓取电影名称、上映时间、评分等信息,并将数据保存到Excel文件中。

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

# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import chardet
import re
import xlwt

#获取某页的内容
def getHtml(index=0):
    print('正在抓取第{}页信息'.format(index+1))
    url = 'https://movie.douban.com/top250?start='+str(index*25)+'&filter='
    r = requests.get(url)
    code = chardet.detect(r.content)['encoding']
    # print(code)   #utf-8
    return r.content.decode(code)

def getData(page):
    dataList = []
    for i in range(page):
        html = getHtml(i)
        soup = BeautifulSoup(html,'html.parser')
#先找到父元素
        parent = soup.find('div',attrs={'id':'content'})   #一定要先找到id的位置,通过id的位置找到父元素
        # print(type(parentDiv))    #<class 'bs4.element.Tag'>
        lis = parent.find_all('li')
        for each in lis:
            data = []
            #获取电影名称
            filmName = each.find('div',attrs={'class': 'hd'}).find('span',attrs={'class': 'title'}).string  # 方法三
            data.append(filmName)
            #获取电影放映时间
            reg1 = re.compile('.*(\d{4}).*')  # 通过正则只获取中间的4个数字
            filmTimeStr = each.find('div',attrs={'class': 'bd'}).find('p').get_text()
            filmTime = re.findall(reg1,filmTimeStr)[0]    #获取第一个匹配的正则数字
            data.append(filmTime)
            # 获取电影评分
            film_score = each.find('div',attrs={'class':'star'}).find_all('span')[1].get_text()
            data.append(film_score)
            #获取电影评分人数each
            reg2 = re.compile('(\d*)')  #匹配任意个数字
            discussNumStr = each.find('div',attrs={'class': 'star'}).find_all('span')[3].get_text()
            discussNum = re.findall(reg2, discussNumStr)[0]  # 获取第一个匹配的正则数字
            data.append(discussNum)
            #获取电影影评, 因为有个别没有简评标签,所以加判断
            if each.find('p', attrs={'class': 'quote'}):   #判断是否有p对象
                filmReview = each.find('p', attrs={'class': 'quote'})\
                    .find('span').get_text()  #如果p标签里只有一个span就不需要指定span的attrs
            else:
                filmReview = ''
            data.append(filmReview)
            dataList.append(data)
    return dataList
# print(getData())

def saveToExcel(page,filename):
    wbk = xlwt.Workbook()
    sheet = wbk.add_sheet('豆瓣电影信息')
    dataList = getData(page)
    title_list = ["电影名称", "上映时间", "豆瓣评分", "豆瓣影评"]
    # 写入表头
    for i in range(len(title_list)):
        sheet.write(0, i, title_list[i])
    #写入电影数据
    for j,each in enumerate(dataList):
        for k,value in enumerate(each):
            sheet.write(j+1,k,value)
    wbk.save(filename)

saveToExcel(10,'豆瓣电影排行榜.xls')
print('结束')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值