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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本文将介绍如何使用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等库,可以帮助我们轻松实现网络爬虫自动化,包括网页内容提取、图片下载、数据清洗与存储等任务。掌握这些方法后,可以用于自动化数据采集、舆情监测等多个应用场景。

相关文章
|
1月前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
147 11
|
1月前
|
边缘计算 容灾 网络性能优化
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
|
1天前
|
数据采集 存储 数据挖掘
深入剖析 Python 爬虫:淘宝商品详情数据抓取
深入剖析 Python 爬虫:淘宝商品详情数据抓取
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
75 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
4天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
30天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
75 9
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
89 3
|
3月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
193 6
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
306 4

推荐镜像

更多