自学内容网 自学内容网

初学者如何用 Python 写第一个爬虫?

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
  • 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
  • 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
  • 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
  • Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
  • 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。

🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。

📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀


📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。

目录

一、爬虫的基本概念

1. 爬虫的定义

2. 爬虫的主要工作流程

3. 常用 Python 工具

二、环境准备

1. 安装 Python

2. 安装必要库

三、写第一个简单的爬虫

1. 完整代码示例

2. 代码逐步解析

1)发送 HTTP 请求

2)检查请求状态

3)解析 HTML 数据

4)提取网页内容

5)打印结果

四、改进爬虫功能

1. 添加请求头

2. 控制爬取频率

3. 保存数据

五、应对复杂网页

1. 动态加载网页

2. 爬取图片或文件

六、爬虫的注意事项

1. 遵守法律和道德

2. 处理异常

3. 避免过于频繁的请求


网页爬虫是一种通过程序自动抓取网页数据的技术。对于初学者来说,使用 Python 写一个简单的爬虫是一个很好的入门项目。Python 提供了许多强大的工具和库,如 requestsBeautifulSoup,可以帮助快速实现网页数据的爬取。

在本文中,我们将从爬虫的基本概念开始,逐步实现一个可以抓取网页内容的简单爬虫,并探讨如何改进爬虫以应对复杂场景。我们将从以下几个方面展开:


一、爬虫的基本概念

1. 爬虫的定义

爬虫(Web Crawler)是一种自动化脚本或程序,它会模拟用户访问网页的行为,从而提取网页中的特定内容。

2. 爬虫的主要工作流程

一个典型的爬虫任务通常包括以下步骤:

  • 发送请求:通过 HTTP 协议访问目标网页,获取其 HTML 内容。

  • 解析数据:对获取到的 HTML 进行解析,提取我们需要的数据。

  • 存储数据:将提取到的数据保存到文件或数据库中,便于后续处理。

3. 常用 Python 工具
  • requests:发送 HTTP 请求,获取网页内容。

  • BeautifulSoup:解析 HTML 或 XML 数据,提取特定内容。

  • re(正则表达式):对复杂文本模式进行匹配和提取。

  • pandas:对数据进行清洗和分析。


二、环境准备

1. 安装 Python

确保你的计算机上已经安装了 Python(推荐使用 3.7 及以上版本)。如果尚未安装,可以从 Python 官方网站 下载并安装。

2. 安装必要库

打开命令行或终端,运行以下命令安装我们需要的 Python 库:

pip install requests beautifulsoup4

 

  • requests:用于发送 HTTP 请求。

  • beautifulsoup4:用于解析 HTML 数据。


三、写第一个简单的爬虫

我们来实现一个简单的爬虫,它将抓取某个网页的标题和正文内容。

1. 完整代码示例

以下代码实现了一个基本的爬虫:

import requests
from bs4 import BeautifulSoup

def simple_crawler(url):
    try:
        # 1. 发送请求
        response = requests.get(url)
        response.raise_for_status()  # 检查请求是否成功

        # 2. 解析网页内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 3. 提取标题和段落内容
        title = soup.find('title').text  # 获取网页标题
        paragraphs = soup.find_all('p')  # 获取所有段落内容

        print(f"网页标题: {title}\n")
        print("网页内容:")
        for p in paragraphs:
            print(p.text)

    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")

# 示例网址
url = "https://example.com"  # 替换为你想爬取的网页地址
simple_crawler(url)
2. 代码逐步解析
1)发送 HTTP 请求
response = requests.get(url)
  • 使用 requests.get() 方法向目标网址发送 GET 请求。

  • 返回的 response 对象包含网页的所有内容,包括 HTML 源代码。

2)检查请求状态
response.raise_for_status()
  • 通过 raise_for_status() 检查请求是否成功。如果返回的 HTTP 状态码表示错误(如 404 或 500),会抛出异常。

3)解析 HTML 数据
soup = BeautifulSoup(response.text, 'html.parser')
  • BeautifulSoup 用于解析 HTML 内容,并将其转化为 Python 对象,方便后续操作。

  • 第二个参数 'html.parser' 指定使用 Python 内置的 HTML 解析器。

4)提取网页内容
title = soup.find('title').text
paragraphs = soup.find_all('p')
  • find('title') 方法返回 <title> 标签的内容。

  • find_all('p') 方法返回所有段落标签 <p>,并以列表形式存储。

5)打印结果
for p in paragraphs:
    print(p.text)
  • 遍历提取到的段落内容,并打印每个段落的文本。


四、改进爬虫功能

1. 添加请求头

一些网站会检测爬虫程序并阻止访问。可以通过添加请求头来模拟浏览器访问。

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
2. 控制爬取频率

为了避免对目标网站造成过高的负载,可以在每次请求后添加延时。

import time

def delay_request(url):
    response = requests.get(url)
    time.sleep(2)  # 等待 2 秒
    return response
3. 保存数据

将爬取的数据保存为文件或数据库。

保存到文件:

with open("output.txt", "w", encoding="utf-8") as f:
    f.write(f"标题: {title}\n")
    for p in paragraphs:
        f.write(p.text + "\n")

保存到 CSV 文件:

import csv

with open("output.csv", "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["段落内容"])
    for p in paragraphs:
        writer.writerow([p.text])

五、应对复杂网页

1. 动态加载网页

对于 JavaScript 渲染的网页,requests 无法获取完整内容,可以使用 seleniumplaywright

示例(使用 selenium):

from selenium import webdriver

url = "https://example.com"

# 配置 WebDriver
driver = webdriver.Chrome()
driver.get(url)

# 获取动态加载的内容
html = driver.page_source
print(html)

# 关闭浏览器
driver.quit()
2. 爬取图片或文件
import os

# 下载图片
img_url = "https://example.com/image.jpg"
response = requests.get(img_url)

# 保存图片
with open("image.jpg", "wb") as f:
    f.write(response.content)

六、爬虫的注意事项

1. 遵守法律和道德
  • 避免违反法律:确保爬取行为符合目标网站的使用条款。

  • 尊重 robots.txt 文件:通过 robots.txt 查看目标网站的爬取限制。

2. 处理异常

对于网络请求失败、数据缺失等情况,添加异常处理逻辑:

try:
    response = requests.get(url)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
3. 避免过于频繁的请求

可以设置延时或使用代理 IP:

proxies = {
    "http": "http://123.45.67.89:8080",
    "https": "http://123.45.67.89:8080"
}
response = requests.get(url, proxies=proxies)


原文地址:https://blog.csdn.net/weixin_45710998/article/details/145136577

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!