Python爬虫基础:针对不需要登录的网页
网络爬虫是一种自动化工具,用于从网页中提取数据。针对不需要登录的网页(如静态页面或公共信息页),Python提供了简单易用的库,例如requests用于发送HTTP请求,BeautifulSoup用于解析HTML。以下我将逐步介绍基础知识和一个完整示例,帮助您快速上手。整个过程基于Python 3.x版本。
1. 核心概念
- HTTP请求:爬虫通过发送GET请求获取网页内容,无需登录的网页通常返回200状态码。
- HTML解析:网页内容为HTML格式,需解析以提取特定元素(如标题、链接或文本)。
- 注意事项:爬虫需遵守网站规则(如
robots.txt),避免高频请求(以免被封IP),并仅用于合法目的。
2. 所需工具
- Python库:
requests:发送HTTP请求,获取网页内容。BeautifulSoup:解析HTML,提取数据。- 安装方法(在命令行中运行):
pip install requests beautifulsoup4
3. 基本步骤
针对不需要登录的网页,爬虫流程如下:
- 发送请求:使用
requests.get()获取网页HTML。 - 检查响应:确保状态码为200(成功)。
- 解析内容:用
BeautifulSoup解析HTML,定位元素(如标签、类名)。 - 提取数据:获取所需信息(如文本或链接)。
- 处理异常:添加错误处理,应对网络问题。
4. 完整示例
以下示例爬取一个公共测试网页(如http://example.com)的标题和所有链接。代码结构清晰,易于修改:
import requests
from bs4 import BeautifulSoup
# 步骤1: 定义目标URL(这里用示例网站)
url = "http://example.com"
try:
# 步骤2: 发送GET请求
response = requests.get(url)
response.raise_for_status() # 检查状态码,非200则报错
# 步骤3: 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser') # 使用内置解析器
# 步骤4: 提取数据
# 获取网页标题
title = soup.title.string
print(f"网页标题: {title}")
# 获取所有链接(<a>标签)
links = soup.find_all('a')
print("\n所有链接:")
for link in links:
href = link.get('href')
if href: # 过滤空链接
print(href)
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
except Exception as e:
print(f"其他错误: {e}")
-
代码说明:
requests.get(url):获取网页,响应存储在response中。soup.title.string:提取标题文本。soup.find_all('a'):查找所有<a>标签,并提取href属性。- 异常处理:捕获网络错误(如连接超时)或解析错误。
-
输出示例:
网页标题: Example Domain 所有链接: https://www.iana.org/domains/example
5. 进阶技巧
- 定位元素:使用
find()或find_all()时,可指定类名或ID,如soup.find_all('div', class_='content')。 - 分页处理:循环遍历多个页面(如修改URL参数)。
- 数据存储:将提取的数据保存到文件(如CSV):
import csv with open('links.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['链接']) for link in links: writer.writerow([link.get('href')]) - 性能优化:添加延时(如
time.sleep(2))避免请求过快。
6. 注意事项
- 合法性:仅爬取公开数据,遵守网站条款(如查看
robots.txt)。 - 反爬机制:有些网站可能检测爬虫,建议设置User-Agent(在请求头中添加
headers={'User-Agent': 'Mozilla/5.0'})。 - 测试环境:先用本地或测试网站练习(如
http://example.com),避免影响真实网站。
通过这个基础框架,您可以轻松扩展爬虫功能。如果您有具体需求(如爬取特定网站),请提供更多细节,我可以进一步优化!
25万+

被折叠的 条评论
为什么被折叠?



