html5lib解析器使用案例——python爬虫爬取全国所有城市最低气温

编程入门 行业动态 更新时间:2024-10-12 03:21:48

html5lib解析器使用案例——python<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫爬取全国所有城市最低气温"/>

html5lib解析器使用案例——python爬虫爬取全国所有城市最低气温

需求:爬取中国天气网全国所有城市的温度(最低气温)形如[{‘city’:‘北京’, ‘temp’:’-3’}]
,并保存到csv文件中

首先进行页面分析
目标网站示例(华北地区部分):.shtml

经分析,

  • 每个页面的整个表格部分的数据在一个class="conMidtab"的<div>标签中,
  • 每个省或直辖市的数据在该<div>标签的一个<table>标签中,
  • 每个<\table>标签中存在多个tr标签,前两个tr标签表示表头,不是我们需要的数据,从第三个tr标签开始,每个* tr标签表示一个城市的数据。
  • 将tr标签中的文本数据全部取出,形成一个列表,经分析发现,城市名称总是在第一个位置,最低温总是在倒数第二个位置。用索引的方式将其取出并储存。
  • 港澳台页面的数据比较特殊。输出后发现该部分数据出现混乱。经过查看该页面的源码,发现该页面的源码中标签不完整,只有一半标签。于是选择使用"html5lib"解析器。该解析器速度慢些,但是容错能力更强,可以将缺失的标签自动补全。可以有效解决该问题。

查看网页源码:

港澳台页面的数据的源码中,<table>标签只有开始,没有结束的</table>
虽然在下方的Element中看是有的:

但是这里的源码是网页渲染出来的,并不是真实的源码。

import requests
import csv
from bs4 import BeautifulSoup# 华北地区页面的url
url = '.shtml'# 定义获取网页源码函数
def get_Source(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}response = requests.get(url, headers=headers)return response.content.decode('utf-8')# 获取东北、华中、华南、华东其他地区的url
def get_Urls(source):soup = BeautifulSoup(source, 'lxml')tags = soup.select('.lq_contentboxTab2')[0].select('a')url_list = []for a in tags:url_list.append('/' + a['href'])return url_list# 解析数据
def get_data(source):data_List = []# 使用html5lib解析器,该解析器容错能力更强soup = BeautifulSoup(source, 'html5lib')tags = soup.find('div', class_='conMidtab').find_all('table')for tag in tags:trs = tag.select('tr')for tr in trs[2:]:# print(tr)city = list(tr.stripped_strings)[0]temp = list(tr.stripped_strings)[-2]weather_dict = {}weather_dict['city'] = cityweather_dict['temp'] = tempdata_List.append(weather_dict)return data_List# 存储数据
def writeData(data_List):with open('weatherdata.csv', 'w', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=['city', 'temp'])writer.writeheader()for each in data_List:writer.writerow(each)def main():html = get_Source(url)urls = get_Urls(html)# print(urls)result = []for u in urls:Html = get_Source(u)result += get_data(Html)writeData(result)if __name__ == '__main__':main()

程序运行结果文件:

更多推荐

html5lib解析器使用案例——python爬虫爬取全国所有城市最低气温

本文发布于:2024-02-25 19:29:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1700064.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   最低气温   全国所有   案例   城市

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!