栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python项目(3)--bs4应用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python项目(3)--bs4应用

#作者:shelbi
from bs4 import BeautifulSoup
import requests
from pyecharts import Bar    #进行可视化 pyecharts
ALL_DATA  = []            #定义一个空列表
def parse_page(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }
    response = requests.get(url , headers = headers)
    text = response.content.decode('utf-8')
    soup =BeautifulSoup(text , 'html5lib')#因为港澳台那页url网页程序并不规范 所以使用容错性更高的html5lib,但是速度比较
    conMidtab = soup.find('div' , class_ = 'conMidtab')  										#慢
    tables = conMidtab.find_all('table') #find_all其实是tag对象的方法,并不是属于beautifulsoup,所以可以直接通过tag
    for table in tables:				 #对象进行查询。所以conmidtab是tag对象, 所以可以直接.find_all查询
        trs = table.find_all('tr')[2:] #[2:]:代表从第三个tr开始进行爬取,原因分析网页程序发现第一个第二个tr为表格的表头
        for index , tr in enumerate(trs):#为什么要使用enumerate?因为分析网页程序发现除去华北地区,其他地区的第0个td信
           	tds = tr.find_all('td')		 #息都含有省份名称,所以抓取的时候会把省份名称抓取下来,而不是城市名称,所以当下
            city_td = tds[0]			 #标为0的时候,即爬取的第一个td即第0个td取第一个td,分析网页程序过程中发现了第一
            if index ==0:				 #个td含有城市名称 所以当下标index==0的时候取第一个td,即可以取到城市名称
                city_td = tds[1]
            city = list(city_td.stripped_strings)[0]#stripped_strings将标签以及换行符去掉,留下文本
            temp_td = tds[-2]
            min_temp = list(temp_td.stripped_strings)[0]
            ALL_DATA.append({"city":city , "min_temp":int(min_temp)})#将爬取到的城市以及其对应的最低温度以字典的形式																		添加到上述的空列表中
            # print({"city":city , "min_temp":int(min_temp)})

def main():
    urls = [
        'http://www.weather.com.cn/textFC/hb.shtml',
        'http://www.weather.com.cn/textFC/db.shtml',
        'http://www.weather.com.cn/textFC/hd.shtml',
        'http://www.weather.com.cn/textFC/hz.shtml',
        'http://www.weather.com.cn/textFC/hn.shtml',
        'http://www.weather.com.cn/textFC/xb.shtml',
        'http://www.weather.com.cn/textFC/xn.shtml',
        'http://www.weather.com.cn/textFC/gat.shtml'
    ]
    for url in urls:		#将每个地方对应的url放进列表并且进行for in遍历成一个一个url分别进行解析
        parse_page(url)
    ALL_DATA.sort(key=lambda data:data['min_temp'])#这块代码相当于把ALL_DATA这个列表赋给里面lambda的data,在取这列表	 里头的min_temp值
    data = ALL_DATA[0:10]#排序完之后取列表的前面十个元素即前面最冷的十个城市
    citys = list(map(lambda x:x['city'] , data))#先遍历data的每一项传给x  此时x为列表,在取x中的city值,也就是data的													 		city值,结果返回给citys变量
    temps = list(map(lambda x:x['min_temp'] , data))

    chart = Bar("中国天气最低气温排行榜")#Bar柱状图的题目
    chart.add('' , citys,temps)    #第一个参数如下图1-1红色箭号显示的地方,第二个参数是x即横坐标,第三个参数是y即纵坐标
    chart.render('temp.html') #没有路径  意味着本地文件,里头的字符串参数是文件名

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号