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

学习爬虫的第二天——分页爬取并存入表中

阅读提示:我现在还在尝试爬静态页面

一、分页爬取模式

以豆瓣Top250为例:

  • 基础url:豆瓣电影 Top 250https://movie.douban.com/top250

  • 分页参数:?start=0(第一页)、?start=25(第二页)等

  • 每页显示25条数据,共10页

二、数据存取

Excel文件存储

  • pandas
  • openpyxl

2.1 openpyxl基本操作

from openpyxl import Workbook

# 创建新工作簿
wb = Workbook()

# 获取活动工作表(默认创建的第一个工作表)
ws = wb.active

# 创建新工作表
ws1 = wb.create_sheet("MySheet1")  # 默认插入到最后
ws2 = wb.create_sheet("MySheet2", 0)  # 插入到第一个位置

# 重命名工作表
ws.title = "New Title"
# 保存工作簿
wb.save("example.xlsx")

# 加载现有工作簿
from openpyxl import load_workbook
wb = load_workbook("example.xlsx")
# 写入数据
ws['A1'] = "Hello"  # 单个单元格
ws.cell(row=1, column=2, value="World")  # 行列指定

# 读取数据
print(ws['A1'].value)  # 输出: Hello
print(ws.cell(row=1, column=2).value)  # 输出: World

# 批量写入
for row in range(1, 11):
    for col in range(1, 5):
        ws.cell(row=row, column=col, value=row*col)

三、爬取代码

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
import time

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
def GetFilm():
    base_url="https://movie.douban.com/top250"
    movies = []
    for start in range(0,250,25):
        url=f"{base_url}?start={start}"
        print(f"正在爬取: {url}")
        try:
            res=requests.get(url,headers=headers)
            soup=BeautifulSoup(res.text,'html.parser')
            items=soup.find_all('div',class_="item")
            for item in items:
                rank=item.find('em').text
                title=item.find('span',class_='title').text
                rating = item.find('span', class_='rating_num').text
                quote = item.find('p', class_='quote').text if item.find('p', class_='quote') else ""

                movies.append([
                    rank,title,rating,quote
                ])
            #添加延迟
            time.sleep(2)
        except Exception as e:
             print(f"爬取{url}时出错: {e}")
             continue

    return movies  # 确保返回列表
top_movies=GetFilm()
# 创建Excel工作簿
wb = Workbook()
ws = wb.active

# 添加表头
headers = ['排名', '电影名称', '评分', '短评']
ws.append(headers)

# 添加数据
for movie in top_movies:
    ws.append(movie)

# 保存Excel文件
excel_file = 'douban_top250_openpyxl.xlsx'
wb.save(excel_file)
print(f"数据已成功保存到 {excel_file}")


结果:

相关文章:

  • AI Agent开发大全第十二课-向量数据库Qdrant使用全教程
  • 自然语言处理入门5——LSTM
  • VMware网络适配器
  • 查看进程文件描述符的限制
  • 什么是最优CUDA内核,GPU也分不同类型吗
  • 赛季7靶场 -- Code -- HTB writeup(Just hint)
  • 测试用例的场景化分析方法
  • 蓝桥杯高频考点——二分(含C++源码)
  • 打磨和修改:字帖自动生成
  • 准确--配置服务器文件数
  • AP 场景架构设计(一) :OceanBase 读写分离策略解析
  • JVM - 年轻代和老年代
  • Linux设备永久挂载
  • 豪越HYCloud消防一体化安全管控平台:融合创新,重塑格局
  • React Hooks使用方法:useState,useRef,useEffect,useReducer,useContext用法实战案例
  • 查询需要用户认证的关键资产(ArkTS)
  • C#基础学习(六)函数的变长参数和参数默认值
  • Leaflet.js+leaflet.heat实现热力图
  • MongoDB 实际工作中应用场景
  • 微信小程序学习
  • 菲律宾选举委员会公布中期选举结果,马科斯阵营选情未达预期
  • 特朗普公开“怼”库克:苹果不应在印度生产手机
  • 上海静安将发放七轮文旅消费券,住宿券最高满800元减250元
  • 巴菲特谈卸任CEO:开始偶尔失去平衡,但仍然保持敏锐的头脑,仍打算继续工作
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上
  • 独行侠以1.8%概率获得状元签,NBA原来真的有剧本?