资讯动态

python3爬虫学习之beautifulsoup实战

发布时间:2026/8/22 19:25:12 来源:尧图企业网站定制
将使用规则以及信息提取规则记录下来, 把记录下来的规则运用到实战当中, 这是在学习课程时所做的案例标点符号。去抓取中国天气网里每一个城市的最低气温, 并且从中排出气温最低的10个城市, 在实际操作过程当中, 会存在各种各样、或大或小关于这方面的误区, 以及有一些对此需要予以留意、小心注意的地方, 接下来都会一个一个去进行列举。上代码import requests from bs4 import BeautifulSoup # from pyecharts import Bar cities_temp [] #处理抓取页面 def parse_url(url): headers { User-Agent : Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Mobile Safari/537.36 } resp requests.get(url ,headersheaders) text resp.content.decode(utf-8) soup BeautifulSoup(text , html5lib) conMidtab soup.find_all(div ,class_conMidtab)[0] tables conMidtab.find_all(table) for table in tables: trs table.find_all(tr)[2:] for index,tr in enumerate(trs): cities {} tds tr.find_all(td) city_td tds[0] if index 0: city_td tds[1] city list(city_td.stripped_strings)[0] temp_td tds[-2] min_temp list(temp_td.stripped_strings)[0] cities[城市] city cities[最低温度] int(min_temp) cities_temp.append(cities) 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: parse_url(url) #分析数据排序 cities_temp.sort(keylambda data:data[最低温度]) data cities_temp[0:10] # cities list(map(lambda x:x[城市],data)) # temps list(map(lambda x:x[最低温度],data)) # chart Bar(中国最低温度城市排行榜) # chart.add(,cities,temps) # chart.render(phb.html) for d in data: for k,v in d.items(): print(k : str(v)) print(**30) if __name__ __main__: main()截取运行结果部分分析网页之际, 应当留意到, 中国天气网划分成华北、东北、港澳台等八个地区, 此八个地区涵盖了全国所有城市, 我们将八个url置于列表里头, 依次遍历该列表, 并且调用分析网页的函数, 以此来提取我们所需的信息。一一般来说我们解析网页时会使用这个soup BeautifulSoup(text , html.parser)或者这个soup (text , lxml)因为他们解析更快但在本代码中用了这个soup (text , )缘由为, 于爬取港澳台那刻, 网站的htnl语言 缺乏规范性, 具备起始标签, 却无终止标签, 前面两种解析将会报错, 没法获取我们所需求的数据, 然而虽说速度较为迟缓, 它却更为强大, 拥有超强的容错性能以及补全html标签代码的本事。二: 当我们对网页展开分析之际, 能够看到有着7个div信息, 其class属性为这般情况, 原因在于中国天气网给出了涵盖今天的七天数据, 既然如此我们仅仅需要今天的数据, 所以我们应当进行下标取0的操作, 以此来获取今天的信息。三: 当我们进行提取信息的操作时会通过遍历标签来获取信息, 在此过程中用到了这个函数, 该函数不但会遍历信息, 而且还会遍历下标, 当我们去获取华北地区信息的时候, 能够看到提取的结果是无误的, 原因在于华北地区的第一个是自治市北京, 紧接着北京的第一个地区又是北京, 呈现出这样的情况:然而我们获取第二个地区东北时就不一样了经过分析能够发现, 华北之所以能够正常进行爬取, 原因是北京存在与北京重名的情况, 然而黑龙江和哈尔滨并非这样, 这意味着, 我们于华北所获取到的是北京市但并非北京市的北京, 我们将北京地区的气温信息给予了北京市在东北地区, 要是把哈尔滨的天气信息给予黑龙江就会出现错误。故而, 我们借助获取下标, 要是属于首个省或者自治市的情况, 也就意味着当首个tr标签的下标等于0的时候, 那么第二个下标处的td标签成为1才会是确切的地区或者的城市之内的气温资讯。本人表达能力确实有限不懂的可以多分析分析或者在下面探讨。三: 我们要获取气温最低的10个城市, 所以, 在这里, 将气温转化为int类型。cities[最低温度] int(min_temp)四剩下的就是把数据按温度排序并做切片操作cities_temp.sort(keylambda data:data[最低温度]) data cities_temp[0:10]我们用到sort函数从低到高排序还用到表达式。把“最低温度”这个key对应的value用作排序的key, 之前, 已将这个参数转化成int类型。最后, 经过排序的那个list, 从低到高的顺序储存着全部的城市名称以及最低气温, 我们去做切片操作, 借此获取温度最低的那10个城市。最后我们打印出来。最最后关于代码中注释掉的内容做的是数据可视化曾是这般情形, 当中缘由在于重新安装了一回系统, 不知因何就出现报错状况了, 只好先进行注释处理, 此刻正努力着手解决, 代码本身是不存在问题的, 若有头绪的同学烦请告知一声, 多谢。也希望能记录的提取规则。还要最后补充一点, 这一点也算是重点, 通常情况下, 去获取抓取内容, 是以上面所获取的那个resp作为例子。假设我们清楚 resp.text() 这个操作, 那么能够从中取得网页的具体内容, 如果需要明晰的话, 可以这样讲在进行爬取的这个过程当中, 必须要把它打印出来, 以此来证实爬取所得到的内容不存在乱码的异常情形, text() 用于获取文本是会进行自动解析, 要是相关网页的编码不符合规范要求, 便会出现乱码。对于本文所涉及的代码而言, 其呈现为resp..(utf-8)这种形式, 此形式是用于指定一种解码方式, 与此同时, 期望能够去了解清楚resp.text以及resp.之间存在的区别, 还有它们各自的用法。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价