动态页面采集与Python实现

内容的生成与交互

内容生成方式

服务器端

  • 主要内容在数据库
  • 页面的结构和表现方式在Web服务器
    • jsp等语言编写连接数据库、查询数据库、生成用户的html文档
    • 另一种方法,在html文档中嵌入SSI指令,默认扩展名.stm、.stm、.stml
      • <!-- # include file = “文件名”--> 在文档合适方式插入文件指令

客户端

  • 轻量级、局部的
  • 需要嵌入一定的脚本和插件

动态交互

URL传递请求参数

URL:协议://域名:端口号/目录/文件名.文件后缀?参数1=值#标志&参数2=值#标志
  • ?表示第一个参数的开始
  • #表示标签,一个Web页面中的特定部分
  • 参数=值,不同参数用&连接

通过Cookie获取命令参数

记录了C/S交互参数,自动获取Cookie

Ajax

允许请求局部内容,其他部分不变
  • 更新触发条件
    • 页面中的定时器
    • 鼠标或键盘事件驱动

动态页面采集技术

知识补充

requests.post() 是用于发送 HTTP POST 请求的 Python requests 库中的一个函数。以下是其主要参数:
  1. url (str):
      • 指定要发送请求的目标 URL。
  1. data (dict, list of tuples, bytes, or file-like object):
      • 请求中要包含的数据。可以是字典、元组列表、字节或类文件对象。
  1. json (object):
      • 以 JSON 格式发送的数据。如果设置了这个参数,它将覆盖 data 参数。
  1. headers (dict):
      • 用于设置 HTTP 请求头的字典。
  1. params (dict or tuple):
      • 作为 URL 查询参数发送的字典或元组。
  1. auth (tuple):
      • HTTP 认证的元组,通常是 (username, password)
  1. cookies (dict):
      • 要随请求一起发送的 cookies 字典。
  1. files (dict):
      • 要上传的文件,以字典形式提供,其中键是字段名称,值是文件名或文件对象。
  1. timeout (float or tuple):
      • 请求超时时间。可以是一个浮点数,也可以是一个包含连接和读取超时的元组。
  1. allow_redirects (bool):
      • 是否允许重定向,默认为 True。
  1. proxies (dict):
      • 代理字典,用于指定请求时要使用的代理。
  1. verify (bool or str):
      • 用于指定是否验证服务器的 SSL 证书。可以是布尔值或字符串(指定证书路径)。
  1. stream (bool):
      • 如果为 True,则内容不会立即下载。可以通过迭代响应的内容属性来手动处理流。
  1. cert (str or tuple):
      • 客户端证书文件路径,也可以是包含证书和密钥文件路径的元组。
  1. hooks (dict):
      • 钩子函数的字典,允许用户在请求的不同阶段注册回调函数。
  1. params (dict or tuple):
      • 作为 URL 查询参数发送的字典或元组。
  • 其中只有URL是必须有的参数

类型

  • 构造带参数的URL,利用参数动态请求
  • 构造Cookie携带参数,利用HTTP头部传递动态请求
  • 离线分析Ajax的动态请求,使用动态页面采集或Cookie、POST发送动态请求
  • 模拟浏览器技术

使用带参数的URL

页面带编码

  • 模拟编码
    • 主要有utf-8、gbk、gb2312、unicode之间的转换
  • 编码转换
    • 仿照目标代码,比如\转换成%

实现方式

  • url参数放在字典,通过字典和字符串运算拼接带参数的url

利用Cookie和Session

cookie的获得/构造

浏览器→开发者模式→访问网站→获取Cookie→存放Cookie到一个txt文件
notion image
notion image

cookie传递到服务器

  • cookie中存的是键值对,所以可以用字典存放
  • Cookie传递的是HTTP协议的请求头
    • 需要使用request.get(“url”,cookies=cookies)中指定cookies的属性值
  • 可以创建Session把cookie信息放到服务器,减少访问次数降低cookie信息泄露风险
    • 需要使用request.session().get(URL)

Ajax

寻找Ajax动态加载的URL
  • 重复执行的JS其中的URL
  • 打开url返回的是多个键值对

实现方式

notion image
notion image
notion image
notion image
  • 一些页面还支持POST提交向服务器发送请求的动态参
    • Pyload数据封装成json
      • dataj=json.dumps(payload)
    • 以post方法发送url请求
      • requests.post(url, data=dataj, header=payloadHeader)

模拟浏览器

实现方式

  • 模拟特定浏览器的header
  • 使用浏览器内核
  • 直接在浏览器上开发组件

模拟特定浏览器的header

  • requests.get(url,headers=http_headers)
    • 其中 http_headers是字典,存放 User-AgentAccpet 等键值对
    • User-Agent 存放的是头部文件

使用浏览器内核

  • pip install selenium
  • 下载chromedriver,与浏览器版本对应,解压后放到浏览器安装目录
  • 将chromedriver.exe所在的目录名添加到操作系统的path环境变量中

页面结构分析

  • 通过页面源代码寻找界面控件对应的控件名称

编程实现

 
Prev
普通爬虫页面采集技术与Python实现
Next
Web信息提取与Python实现
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++