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

python爬虫初体验(三)——将网页数据导出csv和excel文件

1. 安装库

pip install requests
pip install pandas
pip install BeautifulSoup
  • requests 是一个非常流行的 Python 第三方库,用于简化 HTTP 请求。它允许你发送 HTTP/1.1 请求极其简单,而无需底层的socket库或urllib库。requests 库使得发起请求、处理响应变得非常容易,并且支持多种类型的HTTP请求(GET, POST, PUT, DELETE等)。

  • pandas主要用于数据分析和数据处理。它提供了大量的数据结构和数据操作功能,使得处理表格数据变得更加容易和高效。是目前比较常用的一款Python包。

  • BeautifulSoup4(通常简称 BeautifulSoup)是一个用于解析HTML和XML文档的Python库。它可以帮助开发者从网页中提取所需的数据,常用于Web爬虫项目、数据挖掘以及其他需要解析HTML或XML文档的场景。

2. 示例代码

# -*- coding: utf-8 -*-
import csv
import requests
import pandas as pd
from bs4 import BeautifulSoup

# 目标URL
url = 'https://www.shanghairanking.cn/rankings/bcur/2024'
# 请求头,模拟浏览器行为,防止被服务器识别为爬虫。
headers = {
  'Connection': 'keep-alive',
  'Cache-Control': 'no-store, no-cache, must-revalidate',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
  'Accept': '*/*',
  'Accept-Encoding': 'gzip, deflate, br, zstd',
  'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
  'Referer': 'https://www.shanghairanking.cn/rankings/bcur/2024',
}
# 创建一个会话对象,保持连接
session = requests.session()

# 先访问一次首页,模拟用户行为
session.get('https://www.shanghairanking.cn')

# 发送带有headers的GET请求并获取响应内容
resHtml = session.get(url, headers=headers).content.decode('utf-8')

# 使用BeautifulSoup解析HTML内容
html_soup = BeautifulSoup(resHtml, 'html.parser')

# 查找表格中的所有行
all_goods_li = html_soup.find('table').find_all('tr')

def export_rank_csv():
  # 打开CSV文件准备写入
  with open('output.csv', 'wb') as csvfile:
  	# 创建一个csv.writer对象
    csv_writer = csv.writer(csvfile)

    for row in all_goods_li:

      goods_info_list = []

      rank = row.find('div', class_="ranking")
      img_link = row.find('img')['src']
      name = row.find('span', class_='name-cn')
      tags = row.find('p', class_="tags")
      if name and img_link:

        goods_info_list.append(rank.get_text(strip=True).encode('utf-8'))
        goods_info_list.append(img_link)
        # 将name添加到列表中,并转换为UTF-8编码
        goods_info_list.append(name.get_text(strip=True).encode('utf-8'))
        goods_info_list.append(tags.get_text(strip=True).encode('utf-8'))

      csv_writer.writerow(goods_info_list)


def export_rank_excel():
  school_info_list = []

  for row in all_school_li:

    rank = row.find('div', class_="ranking")
    img_link = row.find('img')['src']
    name = row.find('span', class_='name-cn')
    tags = row.find('p', class_="tags")
    if name and img_link:

      school_info_list.append([
        rank.get_text(strip=True).encode('utf-8'),
        img_link,
        name.get_text(strip=True).encode('utf-8'),
        tags.get_text(strip=True).encode('utf-8')
      ])
  # 列名
  first_name = ["排名", "logo", "学校名称", "类型"]

  # 创建一个 DataFrame,列名为 first_name,数据为 school_info_list
  rank = pd.DataFrame(school_info_list, columns=first_name)

  # 将“排名”列转换为整数类型
  rank["排名"] = rank["排名"].astype(int)

  # 使用 openpyxl 作为写入引擎,将 DataFrame 写入 Excel 文件
  # 注意:这里使用了默认的 UTF-8 编码,通常不需要显式指定编码
  rank.to_excel(u"2024中国大学排名.xlsx", index=False)

if __name__ == '__main__':
  # 导出csv文件
  export_rank_csv()

3. 注意事项

  • 编码问题:确保使用正确的编码处理非ASCII字符。
  • 虽然在 Python 2 中 encode(‘utf-8’) 有助于处理编码问题,但在将数据写入 Excel 文件时通常不需要显式指定编码。但是如果导出文件为乱码,在文件开头添加 # -*- coding: utf-8 -*- 以确保文件以 UTF-8 编码保存。
  • 依赖库:确保已经安装了 pandas 和 beautifulsoup4 库。
  • 创建 DataFrame:使用 pandas 创建 DataFrame,列名为 first_name,数据为 school_info_list。
  • 转换数据类型:将“排名”列的数据类型转换为整数。
  • 导出到 Excel 文件:使用 to_excel 方法将 DataFrame 导出到 Excel 文件,index=False 表示不导出索引列。

http://www.kler.cn/news/318766.html

相关文章:

  • eCharts扩展图表
  • PDF一键转播客!PDF2Audio让文档“开口说话“
  • 开始学习深度学习-前言
  • 【Docker】Docker快速入门
  • 玩手机数据集 8201张玩手机的照片,有对应的xml和txt文件,可以用于yolo训练
  • 【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码
  • 程序包管理器控制台中文乱码
  • 外包功能测试干了4年,技术退步太明显了。。。。。
  • VMWare虚拟机键盘卡顿
  • 主流高级编程语言的推出时间及年份
  • vue脚手架Vue CLI 2.9.6创建工程,并引入elementUI的方法
  • SpringBoot文档管理系统:架构与功能
  • Docker Compose 搭建 Redis 哨兵集群模式搭建详解(1主2从+3哨兵)(包含主从复制的搭建) (保证一遍学会)
  • 【Python大语言模型系列】一文教你使用dify云版本开发一个智能客服机器人(完整教程)
  • 线性判别分析(LDA)中计算两个类的中心点在投影方向w上的投影示例
  • 【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!
  • SpringBoot开发——实现webservice服务端和客户端
  • Paper 0 | Visual Instruction Tuning
  • Html--笔记01:使用软件vscode,简介Html5--基础骨架以及标题、段落、图片标签的使用
  • golang strings api接口
  • TraceId在线程池及@Async异步线程中如何传递
  • 低代码门户技术:构建高效应用的全新方式
  • Linux之实战命令10:htop应用实例(四十四)
  • 【中台设计】数字中台,大数据中台解决方案,中台建设指南(资料Word分享)
  • 聊天组件 Vue3-beautiful-chat 插槽
  • Golang | Leetcode Golang题解之第424题替换后的最长重复字符
  • 网安面试题1
  • Pygame中Sprite实现逃亡游戏2
  • 基础容器.
  • ECMAScript与JavaScript的区别