IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python学习,第二课(数据包这个东西,挺麻烦) -> 正文阅读

[Python知识库]Python学习,第二课(数据包这个东西,挺麻烦)

失败就要找方法

既然失败了,就换个思路。
上一课也总结了,很多数据以包的形式传输,那就试试数据包能不能帮助我们。
回忆一下json的格式,今天要用到啦。

换个思路,新的方法

首先,既然是抓取数据包,没有纯粹的HTML语言,也就用不到bs4了。
然后呢,Python自带了json的格式化包,先导入他们。
(bs4)

from urllib import request
from urllib import parse
import json

第二课,第二个小爬虫

锁定目标,这次有点烦

在哪里跌倒,就在哪里继续挖坑。

  1. 善用浏览器:
    刚才打开的双色球专属页面不要关掉,我们需要Ctrl+Shift+I的帮忙。
    在网络一栏里,刷新页面可以看到网页请求了很多内容,只好挨个点过去,找一下我们要的包究竟在哪里。
    在这里插入图片描述
  2. 查找数据接口:
    挨个点过,能够找到数据包真正的位置。
    看吧,目前选中的这个就是传递参数的数据接口 (俗称API)
    在这里插入图片描述
  3. 就是它了,你的API,我的数据源:
    右键复制一下地址,新的URL就用它了!
	Request_URL = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findKjxx/forIssue?name=ssq&code=2021088'

等等,如果直接访问,岂不是每次只能查这一期的?那这个程序可就疯了。
所以,想要随时能查到下一期,这代码才有意义。
所以,删除参数,直接访问它。
代码就是要解决自动化的。

	Request_URL = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findKjxx/forIssue'

接着搞吗?别急,有套路。没参数,能返回啥?

4.接着分析,就这么麻烦
在“消息头”选项卡,点击右侧超级小的“重发→编辑重发”看看究竟是怎么搞的。
在这里插入图片描述
上面的信息告诉我们三个消息。
第一,使用的发送方法是GET
第二,数据包的内容有两条
第三,消息头有很多信息

  1. 开搞,伪装就很烦
    良好习惯不要忘,首先我们要定义好发送给API的数据包并封装,然后还要定义好消息头
	From_Data = {
        'name' : 'ssq',
        'code' : '2021086'
    }
    From_Data = parse.urlencode(From_Data)

    header = {
        "Host": "www.cwl.gov.cn",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Accept-Encoding": "gzip, deflate",
        "Referer": "http://www.cwl.gov.cn/kjxx/ssq/",
        "X-Requested-With": "XMLHttpRequest",
        "Connection": "keep-alive",
        "Cookie": "UniqueID=7XqdBUr7HmrZNm9e1627911902202; Sites=_21; 21_vq=2; _ga=GA1.3.160140450.1627911944; _gid=GA1.3.281036533.1627911944; _gat_gtag_UA_113065506_1=1",
        "Cache-Control": "max-age=0, no-cache",
        "Pragma": "no-cache"
    }

好家伙,真的是很烦。

  1. 在抓一次,不信抓不到:
    数据包封装好了,头也装进去了,在抓一次。
	req = request.Request(url=Request_URL, data=bytes(From_Data,encoding='utf-8'), headers=header)
    res = request.urlopen(req)

搞定了吗?其实没有,刚才在找API的时候,可以看到返回的信息是一个Json数据包,看来要格式化一下,并且找到result才能正确读取咯!知道怎么回事,处理一下!
当然了,你需要在仔细看看找到API的时候,返回的数据包是个啥样子。

    str_json = res.read().decode('utf-8')

    myjson = json.loads(str_json)
    info = myjson['result']
    print(info[0])

运行一下?GO

在这里插入图片描述
Okk,拿到了,但是好乱啊!不是吗?

  1. 定位读取,就得仔细看看
    好吧,仔细分析,其实我们要的开奖信息,就只在“red”和“blue”里面。
    Esay,开搞。
    print("Red:", info[0]['red'], "Blue:",info[0]['blue'])

运行一下,走你!
在这里插入图片描述
成功就这么简单!
到这里,我们掌握了怎样去找到一个数据API
同时呢,还知道了怎么处理数据包
最后呢,还知道了怎样定位读取数据包

结束了吗?做事就要有点钻研精神

伪装头那么长,难道都是必须么?
难道你就不想,代码简单一点?
来Try一下!

熟练运用注释

“#”是Python的注释开关,主要在某位置加上,在它身后的代码都没有作用了,所以用于快速调试、代码说明
所以在这里我每注释一句,就尝试运行,最终确认了生效的信息。

    header = {
#        "Host": "www.cwl.gov.cn",
#        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0",
#        "Accept": "application/json, text/javascript, */*; q=0.01",
#        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
#        "Accept-Encoding": "gzip, deflate",
        "Referer": "http://www.cwl.gov.cn/kjxx/ssq/",
#        "X-Requested-With": "XMLHttpRequest",
#        "Connection": "keep-alive",
#        "Cookie": "UniqueID=7XqdBUr7HmrZNm9e1627911902202; Sites=_21; 21_vq=2; _ga=GA1.3.160140450.1627911944; _gid=GA1.3.281036533.1627911944; _gat_gtag_UA_113065506_1=1",
#        "Cache-Control": "max-age=0, no-cache",
#        "Pragma": "no-cache"
    }

写代码,就是要简洁

简洁的代码,咱们就能方便的看。
所以,还是附上全代码,指不定你还可以用它爬点别的东西。

from urllib import request
from urllib import parse
import json
 
if __name__ == "__main__":

    Request_URL = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findKjxx/forIssue'
    From_Data = {
        'name' : 'ssq',
        'code' : '2021086'
    }
    From_Data = parse.urlencode(From_Data)

    header = {
        "Referer": "http://www.cwl.gov.cn/kjxx/ssq/"
    }
    req = request.Request(url=Request_URL, data=bytes(From_Data,encoding='utf-8'), headers=header)
    res = request.urlopen(req)

    str_json = res.read().decode('utf-8')

    myjson = json.loads(str_json)
    info = myjson['result']

    print("Red:", info[0]['red'], "Blue:",info[0]['blue'])

光爬个信息就行了?做事就是要不断进步!

下一课继续,争取能够随时间自动爬取!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:01:58  更:2021-08-07 12:04:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:47:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码