Python爬虫网页学习

Python爬虫网页学习

下面是自己学习爬虫的思路。

由于动态网页爬取不会,特意挑了一个静态网页进行爬虫。

Python 爬取网站:https://voice.baidu.com/act/newpneumonia/newpneumonia/


爬虫程序顺序:获取网页 —>> 解析网页 —>> 存储数据
【1】获取网页可用的Python库:requests、urllib3和selenium(浏览器模拟,爬取动态网页需要)

  • 此处我是用requests来获取网页代码

相关示例:多进程多线程抓取、登录抓取、突破IP封禁和服务器抓取

【2】解析网页技术:re正则表达式、BeautifulSoup、lxml(mei yong guo)
进阶:处理中文乱码

安装BeautifulSoup库命令 : pip install BeautifulSoup4

  • 此处使用Python的re正则表达式进行字符匹配,然后找到我想要的代码截取下来。

【3】存储数据:相关数据库处理,老衲不会而且此处用不到


先进行单次爬虫从网站上面获取数据,然后使用线程方式每60秒获取一次,以此达到不断更新的目的,下面是Python程序代码。

import requests
import re
import json
import os
import time
import threading

# https://voice.baidu.com/act/newpneumonia/newpneumonia/ 百度公告网址
# https://news.163.com/special/epidemic/ 163网站
# 时间戳


# 线程类
class gzbd(threading.Thread):
    def __init__(self, name, threadID, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter

    def run(self):
        print("开启线程: " + self.name)
        while 1:
            get_message()
            time.sleep(self.counter)


def get_message():  # 爬取网站

    os.system("cls")  # 刷新界面
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) \
                    Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',  # 伪装成QQ浏览器
               'Host': 'voice.baidu.com'  # 网站域名
               }

    link = "https://voice.baidu.com/act/newpneumonia/newpneumonia/"  # 爬虫网站连接
    r = requests.get(link, headers=headers, timeout=5)  # 国内疫情

    if r.status_code == 200:  # 网页正常
        texta = re.search(r"\"summaryDataIn\":(.*?),\"summaryDataOut", r.text, re.I | re.M)
        mapLastUpdatedTime = re.search(r"\"mapLastUpdatedTime\":\"(.*?)\",\"caseList\"", r.text, re.I | re.M)

        print("-------------------------------------------")
        print("网络数据更新至", mapLastUpdatedTime.group(1))
        print("-------------------------------------------")

        js = json.loads(texta.group(1))  # JS对象转换成字典

        print(r"累计确诊:", js["confirmed"], "\t昨日+", js["confirmedRelative"])
        print(r"治愈病例:", js["cured"], "\t昨日+", js["curedRelative"])
        print("-------------------------------------------")
        print(r"无症状  :", js["asymptomatic"], "\t\t昨日+", js["asymptomaticRelative"])
        print(r"外境输入:", js["overseasInput"], "\t\t昨日+", js["overseasInputRelative"])
        print("-------------------------------------------")
        print(r"疑似病例:", js["unconfirmed"], "\t\t昨日+", js["unconfirmedRelative"])
        print(r"死亡病例:", js["died"], "\t\t昨日+", js["diedRelative"])

        print("")

        pencent = float(js["cured"]) / (float(js["died"]) + float(js["cured"]))
        print("治愈率:", pencent * 100, "%")
        print(r"死亡率:", (1 - pencent) * 100, "%")

    else:   # 网页不正常
        print("missing")

    print("-------------------------------------------")
    print(r"线程更新时间", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  # 显示当前时间
    print("-------------------------------------------")


def main():

    threads = []
    thread1 = gzbd("get_message", 1, 60)

    thread1.start() # 线程启动
    threads.append(thread1) # 线程添加到列表

    for t in threads:
        t.join()
    print("退出主线程")


if __name__ == '__main__':
    main()  #主程序

运行效果

在这里插入图片描述


为实现双击就能启动这个脚本,使用Windows上批处理方式启动Python程序

用一个文本保存下面代码,然后文本扩张名改成后缀为.bat
我的脚本路径是:E:\PyQt\Py\spider\gzbd3.py

start python E:\PyQt\Py\spider\gzbd3.py

双击它就可以运行,我感觉还挺爽的。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值