【Python爬虫】网络数据抓取返回的数据类型

参考文档:https://blog.csdn.net/qq_38628970/article/details/131556113

网络爬虫是一种自动化程序,通过模拟人类浏览器的行为,自动访问网页并提取数据。Python提供了许多库和工具,使得编写网络爬虫变得相对简单。其中,常用的库包括requests、BeautifulSoup和Scrapy等。

一、安装所需库

首先,确保安装了所需的库:

pip install requests           #用于发送HTTP请求
pip install beautifulsoup4    #用于解析HTML和XML文档
pip install lxml           #安装解析器,用于解析HTML和XML文件
pip install pandas     #用于数据清洗、处理、分析和可视化
pip install openpyxl  #用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件
pip install requests beautifulsoup4 lxml pandas openpyxl #也可以用一句命令一起安装

二、使用Python进行数据抓取的步骤

要使用Python爬取网页元素并将其保存到Excel文档,以下是一个示例流程:

  1. 使用requests获取网页内容。
  2. 使用BeautifulSoup解析HTML(推荐使用lxml),提取所需的数据。
  3. 使用pandas创建DataFrame并保存到Excel文件。

Pandas DataFrame主要用于数据操作和分析,它可以通过 to_excel 方法将 DataFrame 保存到 Excel 文件中,但这个过程中并不支持插入图片。

附录:完整代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 定义目标网页URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"

# 发送HTTP GET请求
response = requests.get(TARGET_URL)

# 检查HTTP请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.content, "lxml")

    # 定义存储数据的列表
    link_data = []
    img_data = []
    text_data = []

    # 选择网页中所有需要解析的元素
    tag_list = soup.select('.col-3 a')

    # 遍历每个元素,提取所需信息
    for tag in tag_list:
        # 提取链接地址
        link_tag = tag.get('href')
        link_data.append(link_tag)

        # 提取图片地址
        img_tag = tag.find('img').get('src') if tag.find('img') else "null"
        img_data.append(img_tag)

        # 提取文本信息,并对不存在的<p>标签做容错处理
        text_tag = tag.find('p')
        text_data.append(text_tag.get_text().strip() if text_tag else "null")

    # 组装数据为字典格式
    data = {
        '汽车名称': text_data,
        '链接地址': link_data,
        '汽车图片': img_data
    }

    # 创建DataFrame
    df = pd.DataFrame(data)

    # 将DataFrame保存到Excel文件,使用'openpyxl'引擎
    df.to_excel('汽车大全.xlsx', index=False, engine='openpyxl')

    print('数据已保存到Excel文件。')
else:
    # 打印请求失败的状态码
    print(f'请求失败,状态码:{response.status_code}')

三、代码解析

1、发起HTTP请求

使用requests库可以发起HTTP请求,并获取网页的内容。以下是一个简单的示例:

import requests

# 定义目标网页URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"
# 发送HTTP GET请求
response = requests.get(TARGET_URL)

2、使用BeautifulSoup解析文档

2.1 解析文档

你需要一个解析器来解析HTML或XML文档。BeautifulSoup支持多种解析器,如Python内置的html.parser,还有更快的lxml和html5lib。

from bs4 import BeautifulSoup

# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.content, "lxml")
#soup = BeautifulSoup(response.content, "html.parser")
print(soup)

运行结果,假设我们要获取红框内的数据:

BeautifulSoup解析文件结果

2.2 查找元素

你可以使用多种方法来查找元素,比如find(), find_all()等。也可以使用CSS选择器的.select(),.select_one()方法,参考另一篇笔记《BeautifulSoup CSS选择器九种用法》。

    # 选择网页中所有需要解析的元素
    tag_list = soup.select('.col-3 a')
    print(tag_list)

运行结果

获取所需元素

2.3 提取数据
    # 定义存储数据的列表
    link_data = []
    img_data = []
    text_data = []

    # 遍历每个元素,提取所需信息
    for tag in tag_list:
        # 提取链接地址
        link_tag = tag.get('href')
        link_data.append(link_tag)
        print(link_tag)

        # 提取图片地址
        img_tag = tag.find('img').get('src') if tag.find('img') else "Null"
        img_data.append(img_tag)
        print(img_tag)

        # 提取文本信息,并对不存在的<p>标签做容错处理
        text_tag = tag.find('p')
        text_data.append(text_tag.get_text().strip() if text_tag else "Null")
        print(text_tag.get_text().strip()) if text_tag else print("Null")

运行结果

提取所需数据

3、使用pandas

3.1 数据处理

一旦我们获取到数据,就可以进行进一步的处理和存储。根据需求,我们可以将数据保存为CSV、JSON或数据库等格式。

    # 组装数据为字典格式
    data = {
        '汽车名称': text_data,
        '链接地址': link_data,
        '汽车图片': img_data
    }

运行结果

组装数据为json字典格式

3.2、数据储存
import pandas as pd

    # 创建DataFrame
    df = pd.DataFrame(data)

    # 将DataFrame保存到Excel文件,使用'openpyxl'引擎
    df.to_excel('汽车大全.xlsx', index=False, engine='openpyxl')

运行结果

导出结果到Excel文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容