当前位置: 首页 > news >正文

curl / python+selenium爬取网页信息

Python爬取网页信息

  • 需求: 持续爬取某嵌入式设备配置网页上的状态信息

shell脚本

  • 简单快速, 不用装插件
  • 只能爬取静态内容
  1. curl命令返回整个网页的内容
  2. grep命令抓取其中某些字段
  3. 结合正则表达式可多样查找
  4. 但对于动态内容, 比如对某嵌入式设备配置网页上的一条不断更新的信息, 可能只能爬出来占位符XXXX, 不满足我的需要
#!/bin/bash
while true
do# 获取时间戳timestamp=$(date +"%Y-%m-%d %T")# 先获取网页内容, 再获取内容中带Temperature的一行temperature_line=$(curl -s "http://lidar-internal-config.com" | grep "Temperature")# 打印出来echo "$timestamp $temperature_line" >> log.txt  sleep 1
done
# wget和curl差不多效果
# wget -q -O - 192.168.4.5 | grep -o "gps lock\|gps unlock" | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}'

python脚本

  • 要安装一些东西, 有点麻烦

  • 可以爬取动态内容, 模仿网页

  • Ubuntu安装selenium

    • pip安装的可能是py2环境下的, 这时要用pip3安装
  • 再安上边链接的步骤安装geckodriver

    • Ubuntu自带火狐, 所以用geckodriver, 会先打开一个网页, 然后在这个网页上刷新.
    • 如果用get打开网页就读取内容, 可能动态内容还没刷出来, 有时还会抓到占位符, 加个延时就行
    • phantomjs不会打开网页, 但对于变化内容还是只能爬出占位符XXXX, 官方好像也放弃这库, 推荐用firefox或chrome
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import datetime
browser = webdriver.Firefox()
# browser = webdriver.PhantomJS() # 不好用
# 传入地址, 返回要抓取的内容
def Get_Status(address):browser.get(address)time.sleep(0.2) # 延时等待正常刷新# 定位到带GNSS静态字符的位置, 方便抓旁边的动态字符elements = browser.find_elements_by_xpath("//*[text()='GNSS']")sibling_element = elements[0].find_element_by_xpath(".").# 抓取动态内容find_element_by_xpath("./following-sibling::*").text# print(sibling_element)return sibling_elementcurrent_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
file_name = "./log/gps_monitor"+current_time+".txt" # 先定好文件名while True:current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 每条记录打上时间戳Status = Get_Status("你要访问的ip地址")# 写入log文件内with open(file_name,'a') as f:f.write("{}: GGG: {} \n".format(current_time, Status))time.sleep(10)
browser.close()
http://www.lryc.cn/news/21175.html

相关文章:

  • 晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V7.0
  • CPython解释器性能分析与优化
  • Linux 进程:理解进程和pcb
  • 银行数字化转型导师坚鹏:招商银行数字化转型战略研究
  • java 一文讲透面向对象 (20万字博文)
  • 使用file-selector-button美化原生文件上传
  • 0402换元积分法-不定积分
  • 信号类型(雷达)——脉冲雷达(三)
  • 并查集(13张图解)--擒贼先擒王
  • Flutter3引用原生播放器-IOS(Swift)篇
  • 【蓝桥杯每日一题】双指针算法
  • 拼数(一般贪心)
  • LeetCode 热题 C++ 169. 多数元素 10. 正则表达式匹配 155. 最小栈
  • Clickhouse学习:MergeTree
  • 【java基础】包装类,自动装箱和自动拆箱
  • Android笔记(二十五):两种sdk热更插件资源加载方案
  • spring框架--全面详解(学习笔记)
  • 2023年CDGA考试模拟题库(401-500)
  • 软件设计师备考文档
  • Javascript的API基本内容(一)
  • 10、最小公倍数
  • 【vue】vue2.x项目中使用md文件
  • 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权
  • 快速排序+快速定位
  • nginx http rewrite module 详解
  • 机器学习可解释性一(LIME)
  • CV学习笔记-MobileNet
  • C++进阶——继承
  • 数据结构---单链表
  • redis数据结构的底层实现