Python实现网络爬虫自动化:从基础到实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。

1. 基础:使用 requests 抓取网页

在网络爬虫中,requests库是最常用的基础库,用来向网页发送请求并获取响应内容。

示例:抓取网页内容

以下代码示例展示如何请求某网站的HTML内容,并简单打印出其标题。

import requests
from bs4 import BeautifulSoup

def fetch_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        print("请求失败,状态码:", response.status_code)
        return None

def get_page_title(url):
    html = fetch_page(url)
    if html:
        soup = BeautifulSoup(html, "html.parser")
        title = soup.title.string
        print("网页标题:", title)

# 使用示例
get_page_title("https://example.com")

2. 使用 BeautifulSoup 解析网页内容

BeautifulSoup 是一款强大的HTML和XML解析工具。通过它,我们可以轻松地提取网页中的关键信息。

示例:抓取新闻标题和链接

假设我们要抓取一个新闻网站首页上所有新闻的标题和链接。下面代码展示了如何使用 BeautifulSoup 实现这一目标:

import requests
from bs4 import BeautifulSoup

def fetch_news_titles(url):
    html = fetch_page(url)
    if html:
        soup = BeautifulSoup(html, "html.parser")
        news_list = []

        # 假设每个新闻标题在 <h2> 标签,链接在 <a> 标签中
        for news in soup.find_all("h2"):
            title = news.get_text()
            link = news.find("a")["href"]
            news_list.append({
   "title": title, "link": link})

        return news_list

# 使用示例
news = fetch_news_titles("https://example-news-website.com")
for item in news:
    print(item)

3. 数据清洗与存储

我们可以利用 pandas 将爬取到的数据进行处理,并保存为Excel或CSV文件,以便后续分析。

示例:将数据保存到Excel

import pandas as pd

def save_to_excel(data, filename="news_data.xlsx"):
    df = pd.DataFrame(data)
    df.to_excel(filename, index=False)
    print(f"数据已保存到 {filename}")

# 使用示例
news_data = fetch_news_titles("https://example-news-website.com")
save_to_excel(news_data)

4. 爬取带有图片的内容

很多网页包含图片,而爬取图片通常可以结合requests和文件操作,将图片下载到本地保存。

示例:爬取并保存图片

假设我们要爬取包含图片的网址,以下代码展示如何自动下载图片到本地。

import os
import requests
from bs4 import BeautifulSoup

def fetch_images(url, folder="images"):
    os.makedirs(folder, exist_ok=True)
    html = fetch_page(url)
    if html:
        soup = BeautifulSoup(html, "html.parser")

        for i, img in enumerate(soup.find_all("img")):
            img_url = img.get("src")
            img_data = requests.get(img_url).content
            with open(f"{folder}/image_{i}.jpg", "wb") as f:
                f.write(img_data)
                print(f"已保存图片:{folder}/image_{i}.jpg")

# 使用示例
fetch_images("https://example-website-with-images.com")

5. 自动化爬取多页内容

很多网站分页展示数据,这时需要自动化获取多页数据。我们可以使用一个循环并拼接URL,自动化爬取每一页内容。

示例:自动抓取多页数据

以下代码自动化爬取一个分页的新闻网站上所有页面的标题和链接。

def fetch_paginated_news(base_url, pages=5):
    all_news = []
    for page in range(1, pages + 1):
        url = f"{base_url}?page={page}"
        news = fetch_news_titles(url)
        all_news.extend(news)
        print(f"已爬取第 {page} 页")

    return all_news

# 使用示例
all_news_data = fetch_paginated_news("https://example-news-website.com")
save_to_excel(all_news_data, "all_news_data.xlsx")

6. 模拟浏览器请求

有些网站对简单的请求会进行限制,可能需要模拟浏览器请求或在请求中添加Headers来伪装。

示例:添加Headers模拟请求

以下代码在请求中添加Headers以模拟真实浏览器请求:

def fetch_page_with_headers(url):
    headers = {
   
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }
    response = requests.get(url, headers=headers)
    return response.text if response.status_code == 200 else None

# 使用示例
html_content = fetch_page_with_headers("https://example-website.com")

总结

Python的requestsBeautifulSouppandas等库,可以帮助我们轻松实现网络爬虫自动化,包括网页内容提取、图片下载、数据清洗与存储等任务。掌握这些方法后,可以用于自动化数据采集、舆情监测等多个应用场景。

相关文章
|
2月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
255 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
12天前
|
存储 人工智能 运维
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
94 60
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
46 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
97 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
8天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
11天前
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
17天前
|
存储 数据采集 数据格式
Python自动化Office文档处理全攻略
本文介绍如何使用Python自动化处理Word、Excel和PDF文档,提升办公效率。通过安装`python-docx`、`openpyxl`、`pandas`、`PyPDF2`和`pdfplumber`等库,可以轻松实现读取、修改、创建和批量处理这些文档。具体包括:自动化处理Word文档(如读取、修改内容、调整样式),Excel文档(如读取、清洗、汇总数据),以及PDF文档(如提取文本和表格数据)。结合代码示例和实战案例,帮助你掌握高效办公技巧,减少手动操作的错误率。
41 1
|
2月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
110 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
14天前
|
存储 人工智能 运维
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
|
2月前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
77 14