信息差就是钱!

你有没有过这样的经历:

  • 想统计某个网站的商品价格,手动记录到崩溃
  • 想批量下载图片,一个一个右键保存到吐血
  • 想获取竞争对手的数据,手动复制粘贴到天荒地老

别再假装你会手动收集数据了,用Python吧!

今天我们做一个网页爬虫,自动获取网页数据,信息差就是钱!

准备工作

安装所需库:

pip install requests beautifulsoup4

基础:获取网页内容

import requests

def get_webpage(url):
    """
    获取网页内容

    Args:
        url: 网页URL

    Returns:
        网页HTML内容
    """
    try:
        # 设置请求头(模拟浏览器)
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }

        # 发送请求
        response = requests.get(url, headers=headers)

        # 检查状态码
        if response.status_code == 200:
            print(f"成功获取网页:{url}")
            return response.text
        else:
            print(f"请求失败,状态码:{response.status_code}")
            return None

    except Exception as e:
        print(f"请求失败:{e}")
        return None


# 使用示例
if __name__ == "__main__":
    url = "https://www.example.com"
    html = get_webpage(url)

    if html:
        print(html[:500])  # 打印前500个字符

进阶:解析HTML提取数据

from bs4 import BeautifulSoup

def parse_html(html):
    """
    解析HTML提取数据

    Args:
        html: HTML字符串

    Returns:
        提取的数据
    """
    # 创建BeautifulSoup对象
    soup = BeautifulSoup(html, "html.parser")

    # 提取标题
    title = soup.title.string
    print(f"网页标题:{title}")

    # 提取所有链接
    print("\n所有链接:")
    for link in soup.find_all("a"):
        href = link.get("href")
        text = link.string
        if href and text:
            print(f"  - {text}: {href}")

    # 提取所有图片
    print("\n所有图片:")
    for img in soup.find_all("img"):
        src = img.get("src")
        alt = img.get("alt", "")
        if src:
            print(f"  - {alt}: {src}")


# 使用示例
if __name__ == "__main__":
    import requests

    url = "https://www.example.com"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        parse_html(response.text)

实战:爬取新闻标题

import requests
from bs4 import BeautifulSoup
import json

def crawl_news(url):
    """
    爬取新闻标题

    Args:
        url: 新闻网站URL

    Returns:
        新闻列表
    """
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }

        # 发送请求
        response = requests.get(url, headers=headers)

        if response.status_code != 200:
            print(f"请求失败,状态码:{response.status_code}")
            return []

        # 解析HTML
        soup = BeautifulSoup(response.text, "html.parser")

        # 提取新闻标题(这里需要根据实际网页结构修改)
        news_list = []

        # 示例:提取所有h2标题
        for item in soup.find_all("h2"):
            title = item.string
            link = item.find("a")

            if title and link:
                news_list.append({
                    "title": title,
                    "link": link.get("href")
                })

        return news_list

    except Exception as e:
        print(f"爬取失败:{e}")
        return []


def save_news(news_list, filename):
    """
    保存新闻到JSON文件

    Args:
        news_list: 新闻列表
        filename: 文件名
    """
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(news_list, f, ensure_ascii=False, indent=2)

    print(f"新闻已保存到:{filename}")


# 使用示例
if __name__ == "__main__":
    url = "https://www.example.com/news"  # 替换成实际的新闻网站
    news_list = crawl_news(url)

    print(f"\n共爬取 {len(news_list)} 条新闻")
    for news in news_list[:10]:  # 只显示前10条
        print(f"- {news['title']}")

    save_news(news_list, "news.json")

实战:批量下载图片

import requests
import os
from urllib.parse import urljoin

def download_images(url, save_folder="images"):
    """
    批量下载网页图片

    Args:
        url: 网页URL
        save_folder: 保存文件夹
    """
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        }

        # 获取网页
        response = requests.get(url, headers=headers)
        if response.status_code != 200:
            print(f"请求失败,状态码:{response.status_code}")
            return

        # 解析HTML
        soup = BeautifulSoup(response.text, "html.parser")

        # 创建保存文件夹
        os.makedirs(save_folder, exist_ok=True)

        # 找到所有图片
        images = soup.find_all("img")
        print(f"找到 {len(images)} 张图片")

        # 下载图片
        for i, img in enumerate(images, 1):
            src = img.get("src")

            if not src:
                continue

            # 转换成绝对URL
            img_url = urljoin(url, src)

            try:
                # 下载图片
                img_response = requests.get(img_url, headers=headers)

                if img_response.status_code == 200:
                    # 提取文件扩展名
                    ext = os.path.splitext(img_url)[1]
                    if not ext:
                        ext = ".jpg"

                    # 保存图片
                    filename = f"image_{i:03d}{ext}"
                    filepath = os.path.join(save_folder, filename)

                    with open(filepath, "wb") as f:
                        f.write(img_response.content)

                    print(f"  [{i}/{len(images)}] 下载成功:{filename}")

            except Exception as e:
                print(f"  [{i}/{len(images)}] 下载失败:{e}")

        print(f"\n图片已保存到:{save_folder}")

    except Exception as e:
        print(f"下载失败:{e}")


# 使用示例
if __name__ == "__main__":
    url = "https://www.example.com"  # 替换成实际的网页
    download_images(url, "downloaded_images")

注意事项

1. 遵守robots.txt

爬取前先查看网站的robots.txt文件,了解哪些页面可以爬取。

2. 控制请求频率

不要发送太多请求,避免对网站造成压力。

3. 设置合理的延迟

在请求之间添加延迟,模拟人类行为。

4. 尊重网站服务

不要用于非法用途。

本章小结

  • 获取网页内容:使用requests库
  • 解析HTML:使用BeautifulSoup
  • 爬取新闻:提取新闻标题和链接
  • 批量下载图片:自动下载网页图片
  • 注意事项:遵守规则,控制频率

网页爬虫让你自动化获取数据,信息差就是钱!

学习总结

恭喜你完成了《小白Python入门基础知识》的学习!

你已经掌握了:

  1. 环境配置 - Python开发环境搭建
  2. 变量和数据 - 存储和操作数据
  3. 条件判断 - 让电脑学会思考
  4. 循环 - 一次做1000件事
  5. 函数 - 把代码打包成工具
  6. 字符串操作 - 处理文字,像Excel一样简单
  7. 列表和字典 - 存储和管理数据
  8. 文件操作 - 读写Excel、Word、PDF
  9. 实战项目1 - 自动整理文件夹
  10. 实战项目2 - 批量处理Excel
  11. 实战项目3 - 自动发邮件
  12. 实战项目4 - 爬取网页数据

接下来你可以:

  1. 继续深入学习Python高级特性
  2. 学习数据分析、机器学习
  3. 开发自己的项目
  4. 加入Python社区,分享你的作品

记住:最好的学习方式就是动手实践!

别再假装你不会编程了,从现在开始,用Python自动化你的工作,每天节省2小时,一年多出一个月的空闲时间!

加油!