python爬虫系列:一个获取城市天气情况的小工具

作品名称:一个获取城市天气情况的小工具(可视化)
开发环境:PyCharm 2023.3.4 + python3.7
用到的库:sys、pypinyin(文字转换为拼音)、urllib.request、bs4、re
作品简介:运行例子后,先输入城市名称,然后点击按钮“获取天气情况”,最后把该城市的当天和七天天气情况回显到界面,可输入不同的城市名称获取天气情况;如果输入的城市名称错误,则没有数据回显。
实现过程
一、阅读器UI设计

1、安装模块和配置工具,参考《python例子:翻译器(简单》

2、运行工具QtDesigner,利用QtDesigner工具箱设计出界面效果(所需要的控件可查看右边区域),保存效果为文件wi.ui;

3、对文件wi.ui执行pyUIC(ui转化为py代码),执行完生成文件wi.py。

二、代码设计

1、新建文件weather.py,该文件为项目主文件,初始化页面并显示;

2、添加内置模块(下面代码使用)和主方法(用于运行后弹出界面);
"""爬虫系列-获取城市天气情况"""from PyQt5.QtWidgets import *# 引入自定义模块import wi# 引入库import sysfrom pypinyin import pinyin, Style# 导入urllib库的urlopen函数from urllib.request import urlopen, Request# 导入BeautifulSoupfrom bs4 import BeautifulSoup as bfimport re
class parentWindow(QWidget, wi.Ui_Form):    # 初始化方法    def __init__(self):        # 找到父类 首页面        super(parentWindow, self).__init__()        # 初始化页面方法        self.setupUi(self)        # 公共网址        self.url = 'https://www.tianqi.com/'        # 点击获取天气情况        self.getButton.clicked.connect(self.get_data)
if __name__ == '__main__':    # 每一个PyQt5应用都必须创建一个应用对象    app = QApplication(sys.argv)    # 初始化页面    window = parentWindow()    # 显示首页    window.show()    sys.exit(app.exec_())
3、增加函数conversion,用来把文字转换为拼音(获取天气的网址是拼音);
# 文字转拼音def conversion(self, text):    # 使用不带声调的拼音    pinyin_text = pinyin(text, style=Style.NORMAL)    # 将列表中的拼音合并为字符串    no_tone_pinyin = ''.join(''.join(toneless) for toneless in pinyin_text)    return no_tone_pinyin
4、增加公共函数get_weather,用来请求网址,获取天气数据;
def get_weather(self, url, class_name, assembly):    try:        headers = {            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'}        req = Request(url, headers=headers)        # 获取的html内容是字节,将其转化为字符串        html = urlopen(req)        html_text = bytes.decode(html.read())        # 获取页面全部信息        obj = bf(html_text, 'html.parser')        # 获取天气部分的信息        elements = obj.find(class_=class_name).text.strip()        # 使用正则表达式替换多个连续空白行        single_elements = re.sub(r'\n\s*\n', '\n\n', elements)        # 天气信息回显到界面        assembly.setText(single_elements)    except Exception as e:        print(f'错误信息:{e}')        QMessageBox.information(self, '错误信息', '输入的城市名称有错误,请检查一下')
5、增加函数get_data,用来调用其他函数;
def get_data(self):    city = self.cityEdit.text()    if not city:        QMessageBox.information(self, '提示信息', '请先输入城市名称')        return    code = self.conversion(city)    self.get_weather(f'{self.url}{code}', 'weather_info', self.situationEdit)    self.get_weather(f'{self.url}{code}/7/', 'weaul', self.situationEdit_2)
6、全部代码如下。
"""爬虫系列-获取城市天气情况"""from PyQt5.QtWidgets import *# 引入自定义模块import wi# 引入库import sysfrom pypinyin import pinyin, Style# 导入urllib库的urlopen函数from urllib.request import urlopen, Request# 导入BeautifulSoupfrom bs4 import BeautifulSoup as bfimport re

class parentWindow(QWidget, wi.Ui_Form):    # 初始化方法    def __init__(self):        # 找到父类 首页面        super(parentWindow, self).__init__()        # 初始化页面方法        self.setupUi(self)        # 公共网址        self.url = 'https://www.tianqi.com/'        # 点击获取天气情况        self.getButton.clicked.connect(self.get_data)
    # 获取天气函数    def get_data(self):        city = self.cityEdit.text()        if not city:            QMessageBox.information(self, '提示信息', '请先输入城市名称')            return        code = self.conversion(city)        self.get_weather(f'{self.url}{code}', 'weather_info', self.situationEdit)        self.get_weather(f'{self.url}{code}/7/', 'weaul', self.situationEdit_2)
    # 文字转拼音    def conversion(self, text):        # 使用不带声调的拼音        pinyin_text = pinyin(text, style=Style.NORMAL)        # 将列表中的拼音合并为字符串        no_tone_pinyin = ''.join(''.join(toneless) for toneless in pinyin_text)        return no_tone_pinyin
    """    # 获取城市天气数据    url:请求的网址    class_name:获取数据的class名    assembly:回显的组件名    """    def get_weather(self, url, class_name, assembly):        try:            headers = {                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'}            req = Request(url, headers=headers)            # 获取的html内容是字节,将其转化为字符串            html = urlopen(req)            html_text = bytes.decode(html.read())            # 获取页面全部信息            obj = bf(html_text, 'html.parser')            # 获取天气部分的信息            elements = obj.find(class_=class_name).text.strip()            # 使用正则表达式替换多个连续空白行            single_elements = re.sub(r'\n\s*\n', '\n\n', elements)            # 天气信息回显到界面            assembly.setText(single_elements)        except Exception as e:            print(f'错误信息:{e}')            QMessageBox.information(self, '错误信息', '输入的城市名称有错误,请检查一下')

if __name__ == '__main__':    # 每一个PyQt5应用都必须创建一个应用对象    app = QApplication(sys.argv)    # 初始化页面    window = parentWindow()    # 显示首页    window.show()    sys.exit(app.exec_())

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/78980.html

Like (0)
guozi的头像guozi
Previous 2024年5月30日
Next 2024年5月30日

相关推荐

  • 服务器如何搭建网站?

    在当今数字化时代,网站已经成为各行各业必不可少的存在。而要搭建一个成功的网站,服务器的选择和配置则是关键。那么什么是服务器?如何选择适合的服务器?在搭建网站前需要做哪些准备工作?又…

    行业资讯 2024年4月1日
    0
  • 北京优化公司

    想要在北京地区找到一家专业的优化公司吗?不妨先来了解一下搜索引擎优化行业的发展现状。随着互联网的普及,越来越多的企业意识到了网络营销的重要性,而北京优化公司就是其中之一。它们提供的…

    行业资讯 2024年4月12日
    0
  • 沈阳seo顾问有哪些可信赖的团队

    想要在网络行业中获得成功,SEO顾问是不可或缺的一环。但是如何选择一支可信赖的团队,却是让众多企业主和个人纠结的问题。今天,我们就来探讨一下沈阳SEO顾问有哪些可信赖的团队。什么是…

    行业资讯 2024年3月31日
    0
  • 联通客服,联通vp002手机

    如果您需要稳定高效的云服务器,联通VPS是您的最佳选择。什么是VPS?它是一种虚拟专用服务器,利用虚拟化技术将一台物理服务器划分为多个独立的虚拟服务器,每个VPS具有独立的系统、资…

    行业资讯 2024年3月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注