python简单网站爬虫-爬取北京7天最高、最低气温
前置操作:
1.待爬取网站:
北京天气的网址:
http://www.weather.com.cn/weather1d/101010100.shtml
2.查看页面元素:
本次需要抓取的字段为北京7天最高、最低气温,可按F12进入开发者模式,查找对应页面元素:
2.安装beautifulsoup4:
pip install beautifulsoup4
3.安装lxml:
pip3 install lxml
实现代码
__author__ = 'huangsan'
import requests # 导入requests模块
from bs4 import BeautifulSoup # 从bs4包中导入BeautifulSoup模块
# 设置请求头(可在浏览器输入about:version,获取用户代理,更新User-Agent信息)
headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'}
# 目标网站
url ="http://www.weather.com.cn/weather/101010100.shtml"
# 使用request的get方法向目标网站发起请求
web_data = requests.get(url,headers=headers)
# 设置编码格式
web_data.encoding = 'utf-8'
# 网站响应数据
content = web_data.text
# 使用lxml解析器将网站响应解析为Soup对象,便于接下来利用css的selector语法,获取tem的p标签中span元素的数据
soup = BeautifulSoup(content, 'lxml')
# selector获得的是所有符合条件的数据,因此是list,遍历list如date_list[0]的值实质是bs4.element.Tag元素对象
# 获取日期列表
date_list = soup.select('li.skyid h1')
# 获取最高气温列表
h_tem_list = soup.select('p.tem span')
# 获取最低气温列表
l_tem_list = soup.select('p.tem i')
# 遍历列表,输出结果
for i in range(len(date_list)):
print('{0}最高气温为{1}℃,最低气温{2}'.format(date_list[i].text, h_tem_list[i].text, l_tem_list[i].text))
运行结果为:
10日(今天)最高气温为30℃,最低气温20℃
11日(明天)最高气温为32℃,最低气温23℃
12日(后天)最高气温为32℃,最低气温24℃
13日(周六)最高气温为31℃,最低气温25℃
14日(周日)最高气温为33℃,最低气温24℃
15日(周一)最高气温为32℃,最低气温22℃
16日(周二)最高气温为31℃,最低气温22℃