爬虫python入门教程

106 阅读3分钟

Python爬虫入门教程的核心内容包括环境配置、HTTP请求库(如requests)、HTML解析库(如BeautifulSoup)以及数据存储方法,遵循"请求 解析 存储"的基本流程。

1.环境配置:

Python 安装: 确保安装了合适版本的 Python (通常是 Python 3.x)。

包管理工具: 使用 pip 安装所需的第三方库。

虚拟环境 (推荐): 使用 venv 或 virtualenv 创建隔离的项目环境,避免包冲突。

安装核心库: pip install requests beautifulsoup4

2.HTTP 请求库 (如 requests):

作用: 模拟浏览器向目标网站发送 HTTP 请求 (主要是 GET,有时是 POST),获取服务器返回的响应内容(通常是 HTML、JSON、XML 或二进制数据如图片)。

requests 库核心功能:

requests.get(url, headers=headers, params=params, ...):发送 GET 请求。

requests.post(url, data=data, json=json, headers=headers, ...):发送 POST 请求。

response.status_code:获取 HTTP 响应状态码 (200 表示成功)。

response.text:获取响应内容(文本形式,如 HTML)。

response.content:获取响应内容(二进制形式,如图片)。

response.json():如果响应内容是 JSON,将其解析为 Python 字典/列表。

关键点: 设置请求头 (headers),特别是 User-Agent,让请求看起来更像浏览器行为,避免被简单拦截。

3.HTML 解析库 (如 BeautifulSoup):

作用: 将从 requests 获取的 HTML 文本进行解析,提取出我们需要的数据(标题、正文、链接、价格等)。

BeautifulSoup 库核心功能:

创建对象:soup = BeautifulSoup(html_text, 'html.parser') (或 'lxml'/'html5lib' 解析器)。

查找元素:

soup.find(tag_name, attrs={...}):查找符合条件的第一个元素。

soup.find_all(tag_name, attrs={...}):查找所有符合条件的元素,返回列表。

soup.select(css_selector):使用 CSS 选择器查找元素,非常强大灵活。

提取数据:

element.text / element.get_text():获取元素的文本内容。

element['attribute_name']:获取元素的属性值(如 href, src)。

element.parent / element.children / element.next_sibling 等:在 DOM 树中导航。

4.数据存储方法:

作用: 将解析提取到的结构化数据保存下来,供后续使用或分析。

常见方式:

文件:

文本文件 (.txt): 简单存储,但结构化差。with open('data.txt', 'w') as f: f.write(...)

CSV 文件 (.csv): 存储表格数据(行和列)。使用内置 csv 模块或 pandas。非常适合结构化数据。

JSON 文件 (.json): 存储结构化、嵌套的数据。使用内置 json 模块。json.dump(data, file)

数据库 (入门可选,但很重要):

SQLite: 轻量级文件数据库,Python 内置支持 (sqlite3 模块)。适合中小型项目。

MySQL / PostgreSQL: 更强大的关系型数据库,需要额外安装驱动和运行数据库服务。

MongoDB: 文档型数据库,适合存储 JSON 类数据,灵活性高。

简单的示例代码框架

import requests
from bs4 import BeautifulSoup
import csv

# 1. 请求 (Request)
url = "https://example.com/products"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'}  # 模拟浏览器
try:
    response = requests.get(url, headers=headers)
    response.raise_for_status()  # 检查请求是否成功
    html_content = response.text
except requests.exceptions.RequestException as e:
    print(f"请求出错: {e}")
    exit(1)

# 2. 解析 (Parse)
soup = BeautifulSoup(html_content, 'html.parser')  # 使用内置的 html.parser

# 假设产品信息在 class='product' 的 div 里
products = soup.find_all('div', class_='product')

data_list = []
for product in products:
    # 提取具体数据 (示例)
    name = product.find('h2').text.strip()
    price = product.find('span', class_='price').text.strip()
    link = product.find('a')['href']  # 获取链接属性

    # 将数据组织成字典
    product_data = {'name': name, 'price': price, 'link': link}
    data_list.append(product_data)

# 3. 存储 (Store) - 存为 CSV
filename = 'products.csv'
with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['name', 'price', 'link']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data_list)

print(f"数据已成功爬取并保存到 {filename}")

掌握这四点及其流程,就能实现基础的网页信息抓取任务。后续进阶则会涉及更复杂的反爬策略(代理IP、验证码识别、模拟登录、JavaScript渲染处理等)、异步爬虫、爬虫框架(Scrapy)、数据清洗和分析等。