使用Python抓取网页数据主要涉及两个核心库:requests
(发送HTTP请求)和BeautifulSoup
(解析HTML内容)。以下是详细步骤和示例代码:
一、基础安装与库导入
-
安装必要库
需安装
requests
和BeautifulSoup4
库,可使用以下命令:pip install requests beautifulsoup4
若需加速解析,可搭配
lxml
解析器:pip install lxml
-
导入库
在Python脚本中导入所需模块:
import requests from bs4 import BeautifulSoup
二、发送HTTP请求
使用requests
库模拟浏览器访问网页,获取HTML源代码:
url = 'https://example.com' # 替换为目标网页地址
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' # 模拟浏览器请求
}
response = requests.get(url, headers=headers)
# 检查请求是否成功
if response.status_code == 200:
html_content = response.text
else:
print(f"请求失败,状态码:{response.status_code}")
三、解析HTML内容
使用BeautifulSoup
解析HTML,提取所需数据:
-
基础解析
soup = BeautifulSoup(html_content, 'html.parser') # 默认解析器 # 或使用lxml解析器:soup = BeautifulSoup(html_content, 'lxml')
-
提取数据
根据网页结构选择合适标签和属性:
-
提取所有标题(如
<h1>
):titles = soup.find_all('h1') for title in titles: print(title.text)
-
提取链接(如
<a>
标签的href
属性):links = soup.find_all('a', class_='link') for link in links: print(link['href'])
-
提取特定类名的元素(如新闻标题):
news_titles = soup.find_all('a', class_='title') for title in news_titles: print(title.text)
-
四、实战示例:抓取豆瓣电影Top250
以下是完整示例,展示如何抓取豆瓣电影Top250的电影名称:
import requests
from bs4 import BeautifulSoup
# 目标网页地址
url = 'https://movie.douban.com/top250'
# 发送请求
response = requests.get(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
})
response.raise_for_status() # 检查请求是否成功
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 提取电影名称
movie_titles = soup.find_all('div', class_='title')
for title in movie_titles:
print(title.text.strip())
# 注意:豆瓣可能需要反爬虫机制,建议添加延时或使用代理
五、注意事项
-
尊重网站规则
-
避免频繁请求,建议添加延时(如
time.sleep()
); -
使用代理IP或用户代理池,防止被屏蔽;
-
遵守
robots.txt
文件规定。
-
-
处理动态内容
若目标网页使用JavaScript动态加载内容,需使用
Selenium
等工具模拟浏览器行为。 -
数据存储
可将提取的数据保存为CSV或数据库,便于后续分析。
通过以上步骤,可快速掌握Python网页数据抓取的基本方法。根据实际需求调整解析逻辑,即可扩展应用场景。