15分钟学 Python 第40天:Python 爬虫入门(六)第一篇
目录
引言
在前几节中,我们学习了 Python 爬虫的基础知识,包括如何设置环境、发送 HTTP 请求、解析 HTML 文档等。在这一节中,我们将深入了解如何构建一个简单的爬虫,并应用到实际场景中。通过示例项目,帮助大家掌握 Python 爬虫的实用技巧。
爬虫基础回顾
在继续之前,回顾一下我们已学的内容:
- HTTP 请求:使用
requests
库发送 GET 和 POST 请求。 - HTML 解析:使用
BeautifulSoup
或lxml
库解析 HTML 文档。 - 数据提取:通过选择器提取所需数据。
本节目标
本节的目标是实现一个简单的爬虫,抓取某个网站上的实时天气信息。通过这个项目,我们将实践数据获取和存储的具体操作。此外,还将讨论如何处理常见的反爬虫机制。
环境准备
确保你的开发环境已经安装以下库:
bashCopy Codepip install requests beautifulsoup4
案例分析
实例:抓取天气信息
我们将以某天气网站为例,抓取当前天气数据。此类项目在实际应用中非常普遍,比如天气预报应用、数据分析等。
目标网站
以“http://www.weather.com”(假设网站)为例,我们希望获取以下信息:
- 当前温度
- 天气状况(如晴、雨等)
- 风速
- 湿度
网站结构分析
在开始编码之前,我们需要分析目标网页的 HTML 结构。使用浏览器的“检查元素”功能定位我们需要的数据。
爬虫实现
步骤一:发送请求
首先,我们需要使用 requests
库向目标网站发送请求并获取响应:
pythonCopy Codeimport requests
url = "http://www.weather.com"
response = requests.get(url)
if response.status_code == 200:
print("请求成功!")
else:
print("请求失败,状态码:", response.status_code)
步骤二:解析响应
接下来,使用 BeautifulSoup
解析获取到的 HTML 内容,并提取所需的信息:
pythonCopy Codefrom bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# 假设这些是我们需要的数据所在的标签
temperature = soup.find('span', class_='current-temp').text
weather_condition = soup.find('div', class_='weather-condition').text
wind_speed = soup.find('span', class_='wind-speed').text
humidity = soup.find('span', class_='humidity').text
print(f"当前温度: {temperature}")
print(f"天气状况: {weather_condition}")
print(f"风速: {wind_speed}")
print(f"湿度: {humidity}")
步骤三:数据存储
获取数据后,可以选择将其保存到 CSV 文件或数据库中:
pythonCopy Codeimport csv
data = {
'Temperature': temperature,
'Weather Condition': weather_condition,
'Wind Speed': wind_speed,
'Humidity': humidity
}
with open('weather_data.csv', mode='a', newline='') as file:
writer = csv.DictWriter(file, fieldnames=data.keys())
writer.writerow(data)
print("数据已保存到 weather_data.csv")
常见问题及解决方案
-
请求频率限制:有些网站会限制请求频率,导致请求被拒绝。可以在请求之间添加延迟。
pythonCopy Codeimport time time.sleep(2) # 延迟 2 秒
-
反爬虫机制:一些网站会使用防爬虫技术。可以尝试更改请求头,模仿浏览器行为。
pythonCopy Codeheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers)
-
数据格式变化:如果网站更新了布局,需要重新分析 HTML 结构并调整代码。
总结
在本节中,我们完成了一个简单的天气信息爬虫项目,掌握了数据获取、解析和存储的基本流程。通过实际案例,帮助大家理解爬虫的应用场景与技术细节。
下节课我们将进一步探讨爬虫中的高级话题,如异步请求、代理使用以及数据清洗等内容,敬请期待!
以上只是一个大纲和部分内容,要达到 5000 字的详细内容,您可以扩展每个部分的示例、增加更多的错误处理、介绍更多的第三方库(如 Scrapy)、讨论数据可视化等内容。同时,可以加入代码的详细解释、可能的扩展功能等,加深对每个步骤的理解。