python 实时抓取网页数据并进行 筛查

爬取数据的两种方法 :
方法 1 : 使用 requests.get() 方法,然后再解码,接着 调用 BeautifulSoup API

首先看 headers 获取方法 :

点击进入任意一个网页页面,按F12进入开发者模式,点击Network再刷新网页。在Network下的Name中任意点击一个资源,在右侧的Headers版块中下拉到最后,可以看见Request Headers参数列表最后有一个user-agent,其内容就是我们要找的浏览器headers参数值。


然后通过查找 html 源码来 find 指定内容 。利用 find_all() 方法 和 tag.find() 方法

方法2 : 调用 Request() 方法,并进行 urlopen() , decode 操作,最后用 BeautifulSoup() 方法,这样对 html 解析完毕, 接着用 .select() 方法查找 html 代码中的指定内容 。


其实两种方法对于 html 的解析都是固定操作,关键在于 查找 html 的指定内容该如何查找。
首先使用F12对当前页面进行解析,如图所示 :

接着点击左上角的元素检查按钮,即 :

然后再点击想要 爬取的网页内容, 就可以找到 其所在 html 源码中的位置 :
比如我这里的位置是在 pre 里面

紧接着右击 pre 栏,选择复制 selector , 就可以看见所找内容对应的 html 地址 : 我这里的为

#main-panel > pre:nth-child(11)

这里的关键信息就是 > 之后的内容 和 : 之前的内容 。如果有 多个 > 的话,就把多个 > 的信息列出来即可,比如 :

#group-topics > div:nth-child(2) > table > tbody > tr:nth-child(5) > td.title > a

那么就需要提取
tr td.title a
作为关键信息即可。

找出关键信息后,在方法 2 中的 .select() 中填入关键信息即可,注意关键信息用 ’ ’ 包起来 。

下面请看源码 :

from bs4 import BeautifulSoup
import requests
from datetime import datetime
import time
##import schedule## 获取 headers
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'}## 方法 1 爬取 html 网页内容
ip0_url = "http://xxxxxxxxx.cn"
ip1_url = "http://xxxxxxxxx.cn"
ip2_url = "http://xxxxxxxxx.cn"r_ip0 = requests.get(ip0_url,headers = headers)
r_ip1 = requests.get(ip1_url,headers = headers)
r_ip2 = requests.get(ip2_url,headers = headers)html_ip0 = r_ip0.content.decode('utf-8','ignore')
html_ip1 = r_ip1.content.decode('utf-8','ignore')
html_ip2 = r_ip2.content.decode('utf-8','ignore')ip0_page = BeautifulSoup(html_ip0,'lxml')
ip1_page = BeautifulSoup(html_ip1,'lxml')
ip2_page = BeautifulSoup(html_ip2,'lxml')def job_1(sa_page,time_now):now_file = "./err_log/pre.txt"file2 = open(now_file,'w').close()for tag in sa_page.find_all('html'):sub_tag = tag.find('body')with open(now_file,'a') as ff: ff.write(sub_tag.text)ff.close()def job_2(ip_name,log_file):ip = ip_name.split("_lo")[0]line_list = []sa_pre_path = "./err_log/pre.txt"sa_path = "./err_log/{}.txt".format(log_file)file1 = open(sa_pre_path,'rb')for line in file1.readlines():data = line.decode()strlist = data.split("/\n")[0]if "STATUS" in strlist:status = strlist.split("STATUS:")[1].split(" ")[0]if(status == "FAIL"):line_list.append(strlist)# 对 ip0 进行一些特殊处理if (ip_name == "ip0_log"):            with open(sa_path,'w') as fw:fw.write("\n====================={}====================\n\n".format(ip_name))for ll in line_list:fw.write(ll)# 从另外一个 html 网址获取内容ll_0 = ll.split("STATUS")[0]ll_1 = re.sub(r" ","",ll_0)ll_r = re.sub(r'/','_',ll_1)   ## re.sub()   replace function# 获取到指定 url log_url =  "http://xxxx.cn/xxx/XXXXXX_IP/view/03/view/xxx/xxx/xxx_{0}_regre/lastCompletedBuild/testReport/(root)/{1}/{2}/".format(ip,ll_r,ll_r)### 方法 2 ,使用 Request API 来爬取页面 (个人感觉比 方法 1 好用)r_log = Request(log_url,headers = headers)res = urlopen(r_log)aa = res.read().decode('utf-8')log_page = BeautifulSoup(aa,'html.parser')## 搜索 关键路径 comment = log_page.select('pre')######  如果 搜索的 html 网站 没有结果,则 跳过if(len(comment) < 2):continueelse:cc = str(comment[1])key_value = cc.split('Waive List:')[1].split('Error Pattern found')[0]if (len(key_value) < 100):fw.write("{}\n\n".format(key_value)) else:fw.write("ERR MSG : \n")if ("Offending" in key_value):fw.write("Offending {}\n".format(key_value.split("Offending")[1].split("Offending")[0]))        # line 1elif ("UVM" in key_value):fw.write("UVM{}\n\n".format(key_value.split("UVM")[1].split("UVM")[0]))        # line 1
### 在文件中追加写入其他 ip 的内容else:with open(sa_path,'a') as fw:fw.write("\n====================={}====================\n\n".format(ip_name))for ll in line_list:fw.write(ll)ll_0 = ll.split("STATUS")[0]ll_1 = re.sub(r" ","",ll_0)ll_r = re.sub(r'/','_',ll_1)   ## re.sub()   replace functionlog_url =  "http://xxxx.cn/xxx/XXXXXX_IP/view/03/view/xxx/xxx/xxx_{0}_regre/lastCompletedBuild/testReport/(root)/{1}/{2}/".format(ip,ll_r,ll_r)r_log = Request(log_url,headers = headers)res = urlopen(r_log)aa = res.read().decode('utf-8')log_page = BeautifulSoup(aa,'html.parser')comment = log_page.select('pre')######  pass search html data == 0 case : if(len(comment) < 2):continueelse:cc = str(comment[1])key_value = cc.split('Waive List:')[1].split('Error Pattern found')[0]if (len(key_value) < 100):fw.write("{}\n\n".format(key_value)) else:fw.write("ERR MSG : \n")if ("Offending" in key_value):fw.write("Offending {}\n".format(key_value.split("Offending")[1].split("Offending")[0]))        # line 1elif ("UVM" in key_value):fw.write("UVM{}\n\n".format(key_value.split("UVM")[1].split("UVM")[0]))        # line 1###### 定时的提取  html 网页中的内容  并写入 txt 中去
while True:time_hm = time.strftime("%H:%M", time.localtime())  # 刷新time_now = datetime.now().strftime("%Y-%m-%d.%H:%M:%S.%f") if time_hm == "05:01": # 设置要执行的时间job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120) # 停止执行120秒,防止反复运行程序。elif time_hm == "09:01": job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120) elif time_hm == "13:01": job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120) elif time_hm == "17:04":job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120) elif time_hm == "21:01":job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120)elif time_hm == "01:01":job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120)elif time_hm == "11:38":job_1(ip0_page,"ip0_log",time_now)job_2("ip0_log",time_now)job_1(ip1_page,"ip1_log",time_now)job_2("ip1_log",time_now)job_1(ip2_page,"ip2_log",time_now)job_2("ip2_log",time_now)time.sleep(120)

python 实时抓取网页数据并进行 筛查相关推荐

  1. python 爬虫抓取网页数据导出excel_Python爬虫|爬取起点中文网小说信息保存到Excel...

    前言: 爬取起点中文网全部小说基本信息,小说名.作者.类别.连载\完结情况.简介,并将爬取的数据存储与EXCEL表中 环境:Python3.7 PyCharm Chrome浏览器 主要模块:xlwt ...

  2. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  3. python 抓取网页数据

    python 抓取网页数据 此文解决如何从不同网页爬取数据的问题及注意事项,重点说明requests库的应用. 在开始之前,要郑重说明一下,不是每一个网页都可以爬取数据哦.有的网页涉及个人隐私或其他敏 ...

  4. Python爬虫之XPath基础教程:用代码抓取网页数据

    Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...

  5. Python 爬虫篇#笔记02# | 网页请求原理 和 抓取网页数据

    目录 一. 网页请求原理 1.1 浏览网页的过程 1.2 统一资源定位符URL 1.3 计算机域名系统DNS 1.4 分析浏览器显示完整网页的过程 1.5 客户端THHP请求格式 1.6 服务端HTT ...

  6. Python 多线程抓取网页 牛人 use raw socket implement http request great

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  7. Python 多线程抓取网页

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  8. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  9. excel数据自动录入网页_Excel自动抓取网页数据,数据抓取一键搞定

    网站上的数据源是我们进行统计分析的重要信息源.我们在生活中常常听到一个词叫"爬虫",能够快速抓取网页上的数据,这对于数据分析相关工作来说极其重要,也是必备的技能之一.但是爬虫大多需 ...

最新文章

  1. 肖仰华:知识图谱落地,不止于“实现”
  2. codevs 1183 泥泞的道路 二分+SPFA最长路
  3. Oracle递归操作
  4. singleton设计模式_Java Singleton设计模式
  5. 《HTML5+CSS3网页设计入门必读》——2.8 转变(CH-CH变化)
  6. Clion配置Toolchains
  7. 给初学者的RxJava2.0教程(三)
  8. Android内核开发:从源码树中删除出厂的app应用
  9. C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
  10. 服务端AppWeb与PC管理端配合使用的有关说明
  11. 【语音去噪】基于matlab谱减法语音去噪【含Matlab源码 571期】
  12. unicode字符串解析
  13. Server 安装 caffee
  14. css设置html背景颜色代码,CSS背景颜色
  15. 制作可启动DOS优盘
  16. DSP28m35的IPC通讯编程经验
  17. 什么是360度绩效评估反馈?
  18. 最全iPhone启动图尺寸(包含 XS Max XR)
  19. java基础之线程概述_繁星漫天_新浪博客
  20. CP2K入门教程分享

热门文章

  1. 世界人工智能融合发展大会开幕 山东AI产业未来可期
  2. ENET库(可靠UDP)
  3. 有一架天平12个小球,其中有11个重量相同,1个与另外11个不同(不清楚这个球是轻还是重),要求最多称3次,就可以将其中重量特殊的小球找出来。
  4. C++ 控制台程序选择文件/文件夹
  5. android sd 挂载流程_Android7.0 SD卡挂载流程
  6. 操作系统 - Linux
  7. “Win10 UAP 开发系列”之主题模式切换
  8. 用php打印出日历_php简单日历函数
  9. K8S容器编排之POD健康监控
  10. CPU的计算机能力和AVX512指令集