Python爬虫 1.认识爬虫与发送第一个请求


一、为什么要学习爬虫

在互联网时代,大量数据都隐藏在网页中,例如商品信息、新闻内容、评论数据等。

如果我们能够用程序自动获取这些数据,就可以用于:

  • 数据分析
  • 商业决策
  • 自动化处理

本篇文章将带你从 0 开始认识什么是爬虫,并使用 Python 发送第一个网络请求,获取网页数据。

补充:爬虫的典型应用场景

  • 电商:抓取商品价格、评价做比价或趋势分析
  • 舆情:抓取新闻/评论做情感分析
  • 招聘:抓取岗位信息做薪资/技能统计
  • 学术:抓取论文/引用数据做分析

法律与合规提示(重要)

在实际使用爬虫时,需要注意:

  • 遵守网站的 robots 协议
  • 不要对网站造成过高压力(控制频率)
  • 不抓取隐私或受限数据

二、什么是爬虫

简单来说:

爬虫就是用程序模拟浏览器去访问网站,并获取数据。

举个例子:

我们在浏览器中搜索商品:

  1. 输入关键词
  2. 浏览器发送请求
  3. 服务器返回数据
  4. 页面展示结果

而爬虫做的事情是一样的,只不过是用代码来完成。

补充:浏览器与爬虫的区别

  • 浏览器:展示页面(HTML + CSS + JS 渲染)
  • 爬虫:只关心数据(通常获取 HTML/JSON 后自行解析)

补充:静态页面 vs 动态页面

  • 静态页面:HTML 中直接包含数据(requests/urllib 即可)
  • 动态页面:需要 JS 执行后才有数据(需 Selenium 或接口抓取)

三、爬虫的核心流程

所有爬虫都离不开这四个步骤:

  1. 发送请求(Request)
  2. 获取响应(Response)
  3. 解析数据(Parse)
  4. 保存数据(Storage)

本篇我们重点学习前两步。

每一步的职责说明

  1. Request:构造 URL、参数、请求头(headers)
  2. Response:接收服务器返回(HTML/JSON/图片等)
  3. Parse:用 XPath/BS/正则提取需要的数据
  4. Storage:保存到文件/数据库

可以记住一句话:

👉 爬虫 = 请求 + 解析

四、第一个爬虫程序

下面我们写一个最简单的爬虫程序:

import urllib.request

url = 'http://www.baidu.com'

response = urllib.request.urlopen(url)

content = response.read().decode('utf-8')

print(content)

代码解释

  • url:要访问的网站地址
  • urlopen():向服务器发送请求
  • response:服务器返回的数据
  • read():读取网页内容(字节)
  • decode():将字节转为字符串

运行后,你会看到一整页 HTML,这就是网页源码。

运行结果说明

  • 打印的是网页的原始 HTML 源码
  • 浏览器中看到的页面,是在此基础上经过 CSS/JS 渲染后的结果

常见问题

  • 乱码:需要正确 decode('utf-8')
  • 连接慢:可以增加超时参数(见后续章节)

增强示例(带超时与异常处理)

# 导入库
import urllib.request

url = 'http://www.baidu.com'

try:
    # 发送请求(设置超时)
    response = urllib.request.urlopen(url, timeout=5)

    # 读取并解码
    content = response.read().decode('utf-8')

    # 输出部分内容
    print(content[:200])
except Exception as e:
    print('请求失败:', e)

五、Response 对象常用方法

我们可以通过 response 获取更多信息:

response.read()         # 获取网页内容
response.getcode()     # 状态码
response.geturl()      # 当前 URL
response.getheaders()  # 响应头

状态码说明(常见)

  • 200:请求成功
  • 301/302:重定向
  • 403:禁止访问(可能被反爬)
  • 404:页面不存在

示例:打印状态码与 URL

print('状态码:', response.getcode())
print('最终URL:', response.geturl())

六、为什么要伪装浏览器(User-Agent)

有些网站会检测请求来源,如果发现不是浏览器,就会拒绝访问。

因此我们需要伪装请求头。

import urllib.request

url = 'http://www.baidu.com'

headers = {
    'User-Agent': 'Mozilla/5.0'
}

request = urllib.request.Request(url=url, headers=headers)

response = urllib.request.urlopen(request)

print(response.read().decode('utf-8'))

本质:让服务器认为你是正常浏览器访问

补充:常见请求头字段

  • User-Agent:标识浏览器类型
  • Referer:来源页面
  • Cookie:会话信息

示例:添加更多请求头

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Referer': 'https://www.baidu.com'
}

七、GET 请求参数

1. quote(单参数)

import urllib.parse

keyword = '周杰伦'
url = 'https://www.baidu.com/s?wd=' + urllib.parse.quote(keyword)

2. urlencode(推荐)

import urllib.parse

data = {
    'wd': '周杰伦'
}

query = urllib.parse.urlencode(data)

url = 'https://www.baidu.com/s?' + query

多参数示例

import urllib.parse

params = {
    'wd': 'Python 爬虫',
    'pn': 10
}

query = urllib.parse.urlencode(params)
url = 'https://www.baidu.com/s?' + query

注意事项

  • 中文参数需要编码
  • 推荐统一使用 urlencode

八、GET 和 POST 的区别

GET:

  • 参数在 URL 上
  • 适合查询

POST:

  • 参数在请求体中
  • 适合提交数据

(后续文章会详细讲解 POST)

如何在浏览器中判断请求类型

  1. 打开开发者工具(F12)
  2. 切换到 Network
  3. 点击请求
  4. 查看 Method 字段

小结

  • GET:简单、可见、适合查询
  • POST:更安全、适合提交数据

九、爬虫前需要掌握的 Python 基础

真正开始写爬虫之前,不需要把 Python 所有内容都学完,但下面这些基础最好先掌握。

基础内容 在爬虫中的作用
变量与字符串 保存 URL、请求头、响应内容
列表与字典 保存多条数据、请求参数、请求头、Cookie
条件判断 根据状态码、返回内容判断是否继续处理
循环 翻页抓取、多 URL 批量请求
函数 封装请求、解析、保存逻辑
文件读写 保存 HTML、图片、JSON、CSV
异常处理 处理超时、连接失败、解析失败

例如,一个简单的翻页抓取通常就会用到循环、字典和函数:

from urllib import request, parse


def build_url(keyword, page):
    params = {
        'wd': keyword,
        'pn': page * 10
    }
    return 'https://www.baidu.com/s?' + parse.urlencode(params)


for page in range(3):
    url = build_url('Python 爬虫', page)
    response = request.urlopen(url, timeout=10)
    html = response.read().decode('utf-8')
    print(page, len(html))

这里虽然代码不长,但已经包含了几个爬虫中很常见的动作:

  1. 用函数封装 URL 构造逻辑。
  2. 用字典保存查询参数。
  3. 用循环控制分页。
  4. timeout 避免请求一直阻塞。

如果这些 Python 基础不熟悉,后面学习 requestsSeleniumScrapy 时会很容易把问题混在一起。

十、本篇总结

本篇我们完成了爬虫入门的第一步:

  • 了解什么是爬虫
  • 理解爬虫的核心流程
  • 使用 urllib 发送第一个请求
  • 学会查看 Response 信息
  • 掌握基本的 GET 参数处理

请记住:

👉 爬虫的本质就是:请求 + 解析

后续我们会继续学习:

  • urllib 更高级用法
  • requests 库(更常用)
  • 数据解析(XPath / BeautifulSoup)

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录