Python爬虫豆瓣Top250

本文介绍了一个使用Python进行网页爬取的实战案例,目标是从豆瓣电影Top250榜单中抓取电影信息,包括片名、地区和类型。通过BeautifulSoup和正则表达式解析HTML,最终将数据保存至Excel文件。

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

1.引入相关模块

from bs4 import BeautifulSoup  #网页解析,获取数据
import re    #正则表达式,进行文字匹配
import urllib.request,urllib.error   #制定 URL,获取网页数据
import xlwt   #进行excel操作

2.爬虫分为三步:爬取网页 → 解析数据 → 保存数据

3.实现翻页
豆瓣TOP250网址:https://movie.douban.com/top250,获取的这个250个影片的信息分成10页,每页25个。观察发现第1页排名前25的网址为:https://movie.douban.com/top250?start=0&filter=,观察发现第2页排名前26-50的网址为:https://movie.douban.com/top250?start=25&filter=。并且,删掉“&filter=”后,对网页没有影响。
实现翻页:

for page in range(0,10):#获取网址,10页
	url = "https://movie.douban.com/top250?start="+ str(i*25)

4.正则表达式
re.compile(r’字符串1(.*?)字符串2’)
字符串1和字符串2用来定位,输出()中的数据

findTitle = re.compile(r'<span class="title">(.*)</span>')

5.查找User-Agent
F12,或右键+审查元素
在这里插入图片描述
6.完整代码
下面代码,只要把User-Agent填好,就应该可以跑了。

#-*- coding = utf-8 -*-
from bs4 import BeautifulSoup  #网页解析,获取数据
import re    #正则表达式,进行文字匹配
import urllib.request,urllib.error   #制定 URL,获取网页数据
import xlwt   #进行excel操作


def main():
    datalist = getData() #自定义函数,爬取网页,并解析
    saveData(datalist) ##自定义函数,保存数据

#需要的数据的正则表达式
#正则表达式 re.compile(r'字符串1(.*?)字符串2')
#片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
#地区,类型
findMassage = re.compile('p class="">.*\xa0/\xa0(.*)\xa0/\.*\xa0(.*?)\n.*</p>',re.S)    #re.S  让换行符包含在字符中

# 1.爬取网页
def getData():
    datalist = []
    for i in range(0,10): #调用获取页面信息的函数,10次
        url = "https://movie.douban.com/top250?start="+ str(i*25)
        html = askURL(url)   #保存获取到的网页源码

        # 2.解析数据(逐一)
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):  #查找符合要求的字符串,形成列表
            # print(item)   #测试:查看电影item全部信息,可以观察一下内容,选择自己想要的数据
            data = []
            item=str(item)

            title = re.findall(findTitle, item)[0]
            data.append(title)
            massage = re.findall(findMassage, item)[0][1]
            data.append(massage)
            
            datalist.append(data)

    return  datalist


# 得到指定一个URL的网页内容
def askURL(url):
    #模拟浏览器头部信息,向豆瓣服务器发送消息
    head = {
        "User-Agent": "...(这里填写自己的User-Agent,如何查找看地第5点)"
    }	#"User-Agent":用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html


# 3.保持数据
def saveData(datalist):
    workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
    worksheet = workbook.add_sheet('豆瓣电影 Top250')  # 创建工作表
    worksheet.write(0, 1, '影片片名')
    worksheet.write(0, 2, '影片类型')
    for i in range(len(datalist)):
        worksheet.write(i+1, 0, i+1)
        for j in range(len(datalist[0])):
            worksheet.write(i+1,j+1,datalist[i][j])

    workbook.save(".\\豆瓣电影Top250.xls")  # 保存数据表

if __name__ == "__main__": 
    #调用函数
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值