一、爬取湛江天气预报信息
url:http://www.weather.com.cn/weather/10128100101A.shtml
1.思路分析:
①先爬取网页所有数据,div/ul/li,获得7天天气预报的所有信息;
②li下的所有数据进行提取数据;
③保存文件。 --文件操作、json模块。
import requests
import lxml.html
import json
def parse_url(url,header):
""""解析url地址,获得网页的所有数据内容"""
response = requests.get(url,headers=header)
# return response.text 会出现乱码
#改为content二进制数据,再转为字符串decode即可
return response.content.decode("utf-8")
def get_weather_datas(html_content):
""""从所有html数据信息中获取ul>li标签中的所有天气信息"""
metree = lxml.html.etree
# 1 获得解析对象(构造一个 XPath 解析对象并对 HTML 文本进行自动修正)
parser = metree.HTML(html_content,metree.HTMLParser())
# 2 使用Xpath语法获得li所有标签
li_list = parser.xpath("//div[@class='c7d']/ul[@class='t clearfix']/li")
# print(li_list)
# print(len(li_list)) 7
# 3 获得li标签下的所有信息
# 先创建一个空列表
data = []
# 循环遍历
for ele in li_list:
# 创建一个空字典
item = {}
# 继续使用XPath语法
item["date"] = ele.xpath("./h1/text()")[0]
item["天气"] = ele.xpath("./p[@class='wea']/text()")[0]
# item["wea"] = ele.xpath("./p[@class='wea']/@title")[0] 通过title属性获取
item["最低温度"] = ele.xpath("./p[@class='tem']/i/text()")[0]
item["最高温度"] = ele.xpath("./p[@class='tem']/span/text()")[0]
# print(item["最高温度"])
data.append(item)
# print(data)
return data
def save_weather_file(datas):
""""保存文件"""
# 列表转json字符串,并保存到文件中
json_strs = json.dumps(datas,ensure_ascii=False,indent=2)
# print(json_strs)
# print(type(json_strs))
with open("./file/weather.json",