Python3+PyQt5可视化(一)爬取天气数据可视化

1.问题的提出:

实践通过BeautifulSoup爬取实时网络数据,在Python3+PyQt5的环境下展现数据,用PyQtChart实现可视化。

2.Python模块要求及安装方法:(我的环境为python3.7)

1)Python3.7下安装BeautifulSoup4

        pip install lxml -i https://mirrors.aliyun.com/pypi/simple
        pip install html5lib -i https://mirrors.aliyun.com/pypi/simple

2)Python3.7下安装

pip install pyqtchart -i https://mirrors.aliyun.com/pypi/simple

3.解决问题思路:

1)爬取网上实时天气数据

2)将数据通过折线图的方式显示过去24小时城市天气情况(包括温度,湿度,空气质量)

4.代码实现

        1)实现过去24小时天气数据的采集  

    def getUrlContent(self,url, headers):
        response = requests.get(url, headers)
        text = response.content.decode("utf-8")
        bs = BeautifulSoup(text, "html.parser")
        body = bs.body
        return body

    def getDay24Data(self,soup):
        data2 = soup.find_all('div', {'class': 'left-div'})
        text = data2[2].find('script').string
        text = text[text.index('=') + 1:-2]  # 移除改var data=将其变为json数据
        jd = json.loads(text)
        address = jd['od']['od1']  # 城市
        print(address)
        dayone = jd['od']['od2']  # 找到当天的数据
        tempC = []  # X轴标题
        tempT = []  # 温度
        tempH = []  # humidity相对湿度
        tempA = []  # air空气质量
        for i in dayone:
            tempC.append(i['od21'])  # 添加时间
            tempT.append(int(i['od22']))  # 添加当前时刻温度
            tempH.append(int(i['od27']))  # 添加当前时刻相对湿度
            if len(i['od28']) == 0:
                i['od28'] = '0'
            tempA.append(int(i['od28']))  # 添加当前时刻空气质量  # print(temp)
        final_day = {"城市": address, "C": tempC, "T": tempT, "H": tempH, "A": tempA}
        return final_day

调用获取数据: 

self.domain = "http://www.weather.com.cn/weather/101020100.shtml"
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'}  # 自定义header
        self.soup = self.getUrlContent(self.domain, self.headers)
        self.day24 = self.get_content(self.soup)

2)折线图类实现:

class LineSerChartView(QChartView):

    def __init__(self, *args, **kwargs):
        super(LineSerChartView, self).__init__(*args, **kwargs)
        # self.resize(800, 600)
        self.setRenderHint(QPainter.Antialiasing)  # 抗锯齿

    def initData(self,category,datatable):
        self.category = category
        self.dataTable = datatable
    def initChart(self,title='折线图叠加'):
        self._chart = QChart(title=title)
        self._chart.setAcceptHoverEvents(True)
        # Series动画
        self._chart.setAnimationOptions(QChart.SeriesAnimations)

        for series_name, data_list in self.dataTable:
            series = QLineSeries(self._chart)
            for j, v in enumerate(data_list):
                series.append(j, v)
            series.setName(series_name)
            series.setPointsVisible(True)  # 显示圆点
            #gtj
            # series.hovered.connect(self.handleSeriesHoverd)  # 鼠标悬停
            self._chart.addSeries(series)
        self._chart.createDefaultAxes()  # 创建默认的轴
        axisX = self._chart.axisX()  # x轴
        axisX.setTickCount(24)  # x轴设置24个刻度
        axisX.setGridLineVisible(False)  # 隐藏从x轴往上的线条
        axisY = self._chart.axisY()
        axisY.setTickCount(11)  # y轴设置11个刻度
        axisY.setRange(0, 100)  # 设置y轴范围
        # 自定义x轴
        axis_x = QCategoryAxis(
            self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue)
        axis_x.setTickCount(24)
        axis_x.setGridLineVisible(False)
        min_x = axisX.min()
        max_x = axisX.max()
        step = 1 
        for i in range(0, 24):
            axis_x.append(self.category[i], min_x + i * step)
        self._chart.setAxisX(axis_x, self._chart.series()[-1])
        # chart的图例
        legend = self._chart.legend()
        # 设置图例由Series来决定样式
        legend.setMarkerShape(QLegend.MarkerShapeFromSeries)

        self.setChart(self._chart)

3)最后调用图表在窗口展示

from LineSerChartView import LineSerChartView

class MainDo(QWidget, Ui_MainWin):
    def __init__(self):
        QWidget.__init__(self)
        Ui_MainWin.__init__(self)

        self.initUi()

        self.initData()

        chartView =LineSerChartView()
        chartView.initData(self.category, self.dataTable)
        chartView.initChart("过去24小时【%s】天气折线图"%self.day24["城市"])
        chartView.show()

        mainLayout = QGridLayout()
        mainLayout.addWidget(chartView, 1, 0)

        self.setLayout(mainLayout)

    def initUi(self):
        self.setupUi(self)
        self.setWindowTitle("JIDI--测试爬取天气数据可视化")
        self.setAutoFillBackground(True)

        self.palette = QPalette()
        self.palette.setBrush(QPalette.Background, QBrush(QPixmap("./bg.png").scaled(    # 缩放背景图.
                self.size(),Qt.IgnoreAspectRatio,Qt.SmoothTransformation)))
        self.setPalette(self.palette)

    def initData(self):
        self.domain = "http://www.weather.com.cn/weather/101020100.shtml"
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'}  # 自定义header
        self.soup = self.getUrlContent(self.domain, self.headers)
        self.day24 = self.getDay24Data(self.soup)

        self.category = self.day24["C"]
        self.dataTable = [["温度", self.day24["T"]],
                          ["湿度", self.day24["H"]],
                          ["空气质量", self.day24["A"]]
                          ]

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Python3是一种编程语言,它提供了很多库和框架可以用于各种应用开发PyQt5Python3的一个GUI(图形用户界面)库,它允许我们创建各种图形界面应用程序。PyCharm是一个Python集成开发环境(IDE),它提供了丰富的功能和工具,可以方便地进行Python编程和应用程序开发。 在Python3中,我们可以使用PyQt5库来访问和控制摄像头。通过使用PyQt5的QCamera和QCameraViewfinder类,我们可以访问计算机上已连接的摄像头设备,并在应用程序中显示摄像头视频流。这样我们就能够在应用程序中捕捉摄像头的图像,并进行进一步的处理和分析。 PyCharm是一个非常流行的Python开发工具,它提供了许多有用的功能来帮助我们编写、调试和测试Python代码。在PyCharm中,我们可以直接编写Python代码,并使用其强大的代码编辑器和自动补全功能来提高编码效率。同时,PyCharm还提供了集成的调试器,可以方便地调试和跟踪代码的执行过程。 因此,如果我们想在Python3中使用PyQt5库来访问和控制摄像头,并且希望使用一个强大的开发工具来编写和调试代码,我们可以选择使用PyCharm作为我们的开发环境。PyCharm提供了直观的界面和丰富的功能,可以让我们更轻松地编写和调试基于PyQt5的摄像头应用程序。 ### 回答2: Python3是一种高级编程语言PyQt5是用于创建图形界面应用程序的Python库,PyCharm是一种集成开发环境(IDE)。摄像头通常是指用于捕捉图像或视频的设备。 在Python中使用摄像头,可以使用OpenCV库来实现。OpenCV是一个开源计算机视觉库,可用于处理图像和视频。 要在PyQt5中使用摄像头,可以通过使用QCamera类来获取和控制摄像头。您可以将QCamera对象与QCameraViewfinder或QGraphicsView一起使用,以便在应用程序中显示摄像头捕捉的图像。 对于IDE,PyCharm是一种流行的Python开发环境,具有代码编辑器、调试器、版本控制等功能。PyCharm提供了丰富的功能和工具,使Python开发更加高效和便捷。 要在PyCharm中使用Python3PyQt5以及摄像头,您可以首先安装Python3PyQt5库。然后,您可以设置项目,并使用PyCharm提供的编辑器编写代码。在代码中,您可以导入所需的库和模块,以及使用适当的代码来处理摄像头和图像。 总而言之,您可以使用Python3编写具有PyQt5界面的应用程序,并在PyCharm中进行开发和调试。通过使用OpenCV库,您还可以使用摄像头捕捉图像和视频。 ### 回答3: Python3是一种高级编程语言,广泛应用于各个领域的软件开发和数据分析。PyQt5是一个Python模块,用于创建交互式和可视化的桌面应用程序。PyCharm是一种以Python为主要语言的集成开发环境(IDE),它提供了许多方便的工具和功能来帮助开发者更高效地编写和调试代码。 在Python3中,我们可以使用PyQt5来编写应用程序,包括调用摄像头进行图像采集和处理。通过调用PyQt5中的相机模块,我们可以访问计算机上的摄像头设备,并获取实时的图像数据。使用这些图像数据,我们可以进行各种图像处理操作,如图像增强、图像过滤、目标跟踪等。 为了更好地开发和调试Python应用程序,我们可以使用PyCharm作为开发工具。PyCharm提供了代码编辑器、调试器、版本控制集成等功能,可以提高开发效率和代码质量。在PyCharm中,我们可以轻松设置Python解释器,并导入所需的库和模块,以便使用PyQt5进行摄像头编程。 总结来说,Python3PyQt5和PyCharm可以一起使用来实现摄像头相关的应用程序。Python3提供了强大的编程能力,PyQt5提供了访问和处理摄像头图像的功能,而PyCharm提供了开发工具和环境,使开发者可以更轻松地进行开发和调试工作。通过这些工具和技术,我们可以实现各种摄像头应用,如视频监控系统、人脸识别系统等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿桂天山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值