豆瓣电影top250网页爬虫

设计思路

  1. 选择技术栈:确定使用Python及其相关库,如requests用于发送网络请求,获取网址,用re(正则表达式)或BeautifulSoup用于页面内容解析。
  2. 设计流程:规划爬虫的基本流程,包括发起请求、接受响应、解析内容、存储数据等环节。
  3. 模块设计:本设计用了4大模块,包括主体模块、爬取网页数据模块、获取网页数据模块以及保存数据模块。
  4. 错误处理:设计对网络请求错误(如连接超时、服务器错误等)的处理机制,确保程序的稳定

实现过程

首先打开想要爬取的网页,然后定义了存储数据的文件路径,如果这个网页不能爬取,要写一个反爬取的,通过设置请求头和合理的访问间隔来解决,在网络中找到'User-Agent'的请求头,就能破解较为简单的发爬虫机制了。然后导入相关的库,再创建了一个爬取网页数据的geturl函数,写入发爬取的请求头和使用requests库并设置合适的请求体向目标网页发送请求,在这个函数里写入错误处理的代码,如果请求过程中出现异常,会打印出错误信息并返回空值。其次,定义了获取数据的getdata函数,通过BeautifulSoup解析数据,从获取到的网页内容中提取想要的内容。然后定义一个保存数据的savedata函数,将数据保存到想要保存的地方,最后调用主体函数,完成网页爬取过程。

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


def main():
    baseurl = "https://movie.douban.com/top250?start="
    datalist = getdata(baseurl)
    savepath = ".\\豆瓣电影top250.xls"
    savedata(datalist, savepath)





##获取网页数据
def getdata(baseurl):
    id = 0
    # 存储数据列表
    datalist = []
    ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页
    for i in range(0, 10):
        url = baseurl + str(i * 25)
        html = geturl(url)
        # 构建了一个BeautifulSoup类型的对象soup,是解析html的
        # html.parser是解析html的
        soup = BeautifulSoup(html, "html.parser")
        # 获取数据
        movie_items = soup.find_all("div", class_='item')
        for item in movie_items:
            id += 1
            # 保存HTML中一部电影的所有信息
            data = []
            # 获取文字
            title = item.select_one('.title').text
            # print(title)
            # 将那段文字分成列表
            time_data = item.select('.bd p')[0].text.split('\n')
            # print(time_data)
            # 将时间挑选出来
            time = time_data[2].replace(' ', '').split('/')[0]
            # print(time)
            # 将国家挑选出来
            country = time_data[2].replace(' ', '').split('/')[1]
            # print(country)
            # 酱想要的内容追加到数据中
            data.append(id)
            data.append(title)
            data.append(time)
            data.append(country)
            # 讲各部电影的信息存储在数据列表中
            datalist.append(data)
    return datalist


##保存数据
def savedata(datalist, savepath):
    workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)  ##style_compression=0不压缩
    worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True)  # cell_overwrite_ok=True再次写入数据覆盖
    column = ("排名", "电影名", "时间", "国家")  ##execl项目栏
    for i in range(0, 4):
        worksheet.write(0, i, column[i])  # 将column[i]的内容保存在第0行,第i列
    for i in range(0, 250):
        data = datalist[i]
        for j in range(0, 4):
            worksheet.write(i + 1, j, data[j])
    workbook.save(savepath)


##爬取网页
def geturl(url):
    # 破解反爬虫
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
    }
    req = urllib.request.Request(url, headers=head)
    try:  ##异常检测
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):  ##如果错误中有这个属性的话
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html


# 提示文字并执行
if __name__ == '__main__':
    main()
    print("爬取成功!!!")
相关推荐
2301_8009769317 分钟前
正则表达式
开发语言·python·正则表达式
码界奇点30 分钟前
基于Python的新浪微博数据爬虫系统设计与实现
数据库·爬虫·python·毕业设计·新浪微博·源代码管理
AI木马人1 小时前
1.人工智能实战:大模型推理接口响应慢?从模型加载到 FastAPI 部署的完整优化方案
人工智能·python·fastapi
青少儿编程课堂1 小时前
2026青少儿信息素养大赛备赛指南!Python/Scratch/C++备考要点
开发语言·c++·python
用户8356290780511 小时前
使用 Python 设置 Excel 数据验证
后端·python
Nick_zcy2 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi
*Lisen2 小时前
从零手写 FlashAttention(PyTorch实现 + 原理推导)
人工智能·pytorch·python
用户8356290780512 小时前
用 Python 轻松在 Excel 工作表中应用条件格式
后端·python
red1giant_star2 小时前
Python根据文件后缀统计文件大小、找出文件位置(仿Everything)
后端·python
雷欧力2 小时前
如何使用 Claude API?3 种接入方案实测,附完整代码(2026)
python·claude