当前位置:首页 > 技术 > 正文内容

网络爬虫基础与Requests库应用

访客 技术 2026年7月13日 4

爬虫基础原理

网络爬虫本质是通过HTTP协议模拟客户端请求:

# 核心流程
发送HTTP请求 → 服务器响应 → 数据解析 → 存储结果

# 常用工具
- 请求库:Requests, Selenium
- 解析库:BeautifulSoup, lxml
- 框架:Scrapy

合法性问题:网站根目录下的robots.txt定义了爬取规则。

GET请求处理

import requests
response = requests.get('https://www.example.com/article')
print(response.text)  # 获取HTML内容

请求参数处理

# URL参数拼接
params = {'keyword': '数据分析', 'page': 2}
result = requests.get('https://api.example.com/search', params=params)

# URL编解码
from urllib.parse import quote, unquote
encoded = quote('中文参数')
decoded = unquote('%E4%B8%AD%E6%96%87')

请求头设置

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64 x64)',
    'Referer': 'https://origin-site.com/'
}
response = requests.get('https://target-site.com', headers=headers)

Cookie应用

# 方式1:header携带
auth_headers = {'Cookie': 'session_id=abc123xyz'}
requests.post('https://auth-site.com/vote', headers=auth_headers)

# 方式2:专用参数
requests.get('https://member-site.com', cookies={'token': 'qwerty987'})

POST请求示例

login_data = {
    'email': 'user@example.com',
    'password': 'securePass123',
    'remember_me': True
}
session = requests.Session()
session.post('https://login-portal.com/auth', data=login_data)
profile = session.get('https://login-portal.com/profile')

响应处理方法

resp = requests.get('https://data-service.com/api')
print(resp.status_code)  # 状态码
print(resp.headers)      # 响应头
print(resp.json())       # JSON解析
print(resp.cookies)      # 获取Cookie

二进制数据处理

# 图片下载
img_res = requests.get('https://cdn.com/image.jpg')
with open('local_image.jpg', 'wb') as f:
    f.write(img_res.content)

# 视频流处理
video_res = requests.get('https://stream.com/video.mp4', stream=True)
with open('video.mp4', 'wb') as v:
    for chunk in video_res.iter_content(chunk_size=1024):
        v.write(chunk)

代理配置

proxy_config = {
    'http': 'http://203.0.113.1:8080',
    'https': 'https://203.0.113.2:8443'
}
requests.get('https://check-ip.com', proxies=proxy_config, timeout=5)

异常处理机制

from requests.exceptions import Timeout, ConnectionError

try:
    requests.get('https://unstable-site.com', timeout=3)
except Timeout:
    print("请求超时")
except ConnectionError:
    print("网络连接异常")

代理池实现

import requests

def get_proxy():
    proxy_data = requests.get('http://proxy-pool:5010/get/').json()
    scheme = 'https' if proxy_data['https'] else 'http'
    return {scheme: f"{scheme}://{proxy_data['proxy']}"}

proxy = get_proxy()
response = requests.get('https://ip-check.com', proxies=proxy)

BeautifulSoup解析

from bs4 import BeautifulSoup

html_content = "<html><body><p class='content'>示例文本</p></body></html>"
soup = BeautifulSoup(html_content, 'lxml')

# 元素定位
paragraph = soup.find('p', class_='content')
print(paragraph.text)  # 输出: 示例文本

文档树遍历

# 获取父元素
parent = paragraph.parent

# 获取兄弟节点
next_sib = paragraph.next_sibling

# 获取所有子元素
children = list(paragraph.children)

文档搜索技巧

# 属性搜索
links = soup.find_all(href=re.compile("example.com"))

# 多条件查询
items = soup.find_all(attrs={"class": "item", "data-id": True})

相关文章

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。