爬虫——同步与异步加载

一、同步加载

同步模式--阻塞模式(就是会阻止你浏览器的一个后续加载)停止了后续的解析 因此停止了后续的文件加载(图像)

比如hifini音乐网站

二、异步加载

异步加载--xhr(重点)

比如腾讯新闻,腾讯招聘等

三、同步加载和异步加载的区分

1.网页数据返回的方式

(数据返回给你客户端的时候返回的方式有哪些)

---直接返回的网页文本

---ajax加载(通过异步加载回来的数据 一般都是json数据)

----javascript渲染

2.区别

观察你在翻页的时候刷新按钮有没有动

动了 ----- 同步--找数据包优先找all

未动 --异步--找数据包优先找xhr

注意:我们去抓取网站 大致分为两种类别:

---网页文本(html)

-----通过接口返回的数据(json)

爬取腾讯新闻------异步加载

注意:优先找带有list的数据包------offset、limit------headers

点击之后,可以在预览部分查看会否有需要的数据。如果有就说明数据包没有找错。

当你不断往下滑刷新页面后,这时就会出现上面2中,类似的url地址,只不过他的offset会发生变化

示例代码:

import requests
from jsonpath import jsonpath
#发请求
url = "https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list"
#ctrl+r
data = {
    'sub_srv_id':'24hours',
    'srv_id':'pc',
    'offset':'40',
    'limit':'20',
    'strategy':'1',
    'ext':'{"pool":["top","hot"],"is_filter":7,"check_type":true}',
}
def get_data():
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    r = requests.get(url,headers=headers,params=data)
    if r.status_code==200:
        # d =r.text
        # print(d)
        json_data = r.json()
        # print(json_data)
        return json_data
#解析
def parse_data(data):#形参站位 模拟的就是json_data
    #第一个参数是你要解析的对象 第二个参数是解析语法 $表示根节点 ..表示跳过中间任意层级 直接找到目标层级,.表示一个层级
    title = jsonpath(data,'$..title')#标题
    url = jsonpath(data,'$..url')
    # print(title)
    # print(url)
    for titles,urls in zip(title,url):
        print(titles)
        print(urls)
        print('========================')


if __name__ == '__main__':
    h = get_data()
    parse_data(h)

zip可将多个可迭代对象打包成元组,返回有这些元组组成的列表

四、jsonpath用法

示例代码:

from jsonpath import jsonpath
data = { "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
authors=jsonpath(data,'$..author')
titles=jsonpath(data,'$.store.book[*].title')
items=jsonpath(data,'$.store.*')
print(authors)
print(titles)
print(items)

运行结果:

相关推荐
兆。1 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
API快乐传递者7 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
兜里有糖请分享18 小时前
Python中序列化/反序列化JSON格式的数据
爬虫·python
亿牛云爬虫专家1 天前
用Puppeteer点击与数据爬取:实现动态网页交互
javascript·爬虫·爬虫代理·puppeteer·数据·代理ip·16yun
API快乐传递者1 天前
利用Python 的爬虫技术淘宝天猫销量和库存
开发语言·爬虫·python
操练起来1 天前
【Python实战案例】爬虫项目实例(附赠源码)
数据库·爬虫·python
编码小袁1 天前
利用爬虫爬取网站信息
爬虫
孤寒者1 天前
【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】
爬虫·代理ip·隧道代理·有道云翻译爬虫·青果代理ip
=(^.^)=哈哈哈1 天前
从安全角度看多线程(附Golang举例)
爬虫·python·golang
Python_trys2 天前
Python网络爬虫入门篇!
开发语言·爬虫·python