如何用Python编程实现一个简单的Web爬虫?
一、核心库介绍
- requests:发送HTTP请求,获取网页内容(需安装: pip install requests )。
- BeautifulSoup:解析HTML/XML,提取数据(需安装: pip install beautifulsoup4 )。
二、实现步骤
1. 发送请求:用 requests.get() 获取目标网页的HTML源码。
2. 解析内容:用 BeautifulSoup 解析HTML,定位需要的标签。
3. 提取数据:通过标签名、类名、ID等提取文本或属性(如链接、图片地址)。
4. 保存结果:将提取的数据保存为文本、CSV或其他格式。
三、示例代码(爬取网页标题和链接)
import requests
from bs4 import BeautifulSoup
# 目标网页URL(以豆瓣电影首页为例,实际爬取需遵守网站robots协议)
url = "https://movie.douban.com/"
# 1. 发送请求,获取HTML
response = requests.get(url)
# 检查请求是否成功(状态码200表示成功)
if response.status_code == 200:
html = response.text
else:
print("请求失败,状态码:", response.status_code)
exit()
# 2. 解析HTML
soup = BeautifulSoup(html, "html.parser") # 使用html.parser解析器
# 3. 提取数据(以提取热门电影标题和链接为例)
# 定位包含电影信息的标签(需根据网页实际结构调整选择器)
movie_list = soup.select(".billboard-bd li a") # 假设标签结构为<li><a>...</a></li>
# 4. 处理并打印结果
for movie in movie_list:
title = movie.get_text() # 获取标签内的文本(电影标题)
link = movie["href"] # 获取a标签的href属性(电影链接)
print(f"标题:{title}\n链接:{link}\n")
四、注意事项
1. 遵守规则:检查网站的 robots.txt (如 https://example.com/robots.txt ),不爬取禁止的内容。
2. 反爬处理:部分网站会限制爬虫,可添加请求头( headers )模拟浏览器,例如:
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)
3. 频率控制:添加延迟(如 time.sleep(1) ),避免频繁请求给服务器造成压力。
4. 动态内容:若网页内容由JavaScript动态生成,可能需要使用 selenium 等工具模拟浏览器渲染。