Advertisement

爬虫二、Network---爬虫必备知识

阅读量:

Network

读: [ˈnetwɜːk] n.网络;网状系统;关系网;
v.将…连接成网络;联播;建立工作关系
打开工发者工具:F12,或右键–检查(ctrl+shift+i)
Network能够记录当前浏览器的所有请求,它记录的是实时网络请求,刷新,浏览器会重新访问网络,这样就会有记录
1、ALL:查看全部。
2、XHR(或Fetch):仅查看XHR,下拉可自动加载网页。XHR的功能是传输数据,其中有非常重要的一种数据是用json格式写成的,和html一样,这种数据能够有组织地存储大量内容。json的数据类型是“文本”,在Python语言当中,我们把它称为字符串。我们能够非常轻易地将json格式的数据转化为列表/字典,也能将列表/字典转为json格式的数据。

复制代码
    调用Response类方法将json格式的数据转化为列表/字典 ,例:
    res_music = requests.get ('url')#调用get方法,下载这个字典
    json_music = res_music.json ()
    
    
      
      
      
    

3、Doc:(Document)第0个请求一般在这里
4、Img:仅查看图片 Media:仅查看媒体文件, Other:其他
5、JS和CSS,则是前端代码,负责发起请求和页面实现;
6、Font是文字的字体;
7、WS和Manifest,需要网络编程的知识,倘若不是专门做这个,不需要了解
左边框框里的是Elements,我们在那里查看网页源代码
在这里插入图片描述

Network面板怎么用

在这里插入图片描述
第0行的左侧,红色的圆钮是启用Network监控(默认高亮打开),灰色圆圈是清空面板上的信息。右侧勾选框Preserve log,它的作用是“保留请求日志”。如果不点击这个,当发生页面跳转的时候,记录就会被清空。所以,我们在爬取一些会发生跳转的网页时,会点亮它
在Network中,有一类非常重要的请求叫做XHR,它的功能是浏览网页时,下滑自动加载出更多内容,这个,叫做Ajax技术。
在这里插入图片描述
从左往右分别是:Headers:标头(请求信息)、Preview:预览、Response:响应、Cookies:Cookies、Timing:时间。

最左侧的Headers,它被分为几个不同的板块

在这里插入图片描述
一、General
1、 Requests URL

Requests URL就是我们应该去访问的链接,回到原网址,直接用Preview来看。
在这里插入图片描述

利用requests.get()访问这个链接,把这个字典下载到本地。然后去一层一层地读取,使用res.text取到的,是字符串,它不是我们想要的列表/字典,数据取不出来。
json是什么?
json是一种数据交换的语法。对我们来说,它只是一种规范数据传输的格式,形式有点像字典和列表的结合体。
它是另一种组织数据的格式,长得和Python中的列表/字典非常相像。它和html一样,常用来做网络数据传输。刚刚我们在XHR里查看到的列表/字典,严格来说其实它不是列表/字典,它是json。我们总是可以将json格式的数据,转换成正常的列表/字典,也可以将列表/字典,转换成json。
json数据如何解析? 见本文最开头示例。

2、Request Method:GET
3、Status Code: 200
4、Remote Address:
5、Referrer Policy:
二、Response Headers
三、Request Headers—请求头

(查询字符串参数)请求头.每一个请求,都会有一个Request Headers,我们把它称作请求头。它里面会有一些关于该请求的基本信息,比如:这个请求是从什么设备什么浏览器上发出?这个请求是从哪个页面跳转而来?
user-agent(中文:用户代理)会记录你电脑的信息和浏览器版本(如我的,就是windows10的64位操作系统,使用谷歌浏览器)。
origin(中文:源头)和referer(中文:引用来源)则记录了这个请求,最初的起源是来自哪个页面。它们的区别是referer会比origin携带的信息更多,如果我们想告知服务器,我们不是爬虫,而是一个正常的浏览器,就要去修改user-agent。倘若不修改,那么这里的默认值就会是Python,会被服务器认出来。
而对于爬取某些特定信息,也要求你注明请求的来源,即origin或referer的内容。
Requests模块允许我们去修改Headers的值,把要修改的值封装成字典。

每个url都由两部分组成。前半部分大多形如:https://xx.xx.xxx/xxx/xxx
后半部分,多形如:xx=xx&xx=xxx&xxxxx=xx&……
两部分使用?来连接。如豆瓣网址,前半部分是:
https://www.douban.com/search
后半部分则是:q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1(使用utf-8编码的)
它们的中间使用了?来隔开。
这前半部分是我们所请求的地址,它告诉服务器,我想访问这里。而后半部分,就是我们的请求所附带的参数,它会告诉服务器,我们想要什么样的数据。
这参数的结构,会和字典很像,有键有值,键值用=连接;每组键值之间,使用&来连接。
示例 (爬取QQ音乐中的周杰伦歌曲信息):

复制代码
    import requests
    url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
    
    headers = {
    'origin':'https://y.qq.com',
    # 请求来源,本案例中其实是不需要加这个参数的,只是为了演示
     'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html',
    # 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    # 标记了请求从什么设备,什么浏览器上发出
          }
    # 伪装请求头
    
    params = {
    'ct':'24',
    'qqmusic_ver': '1298',
    'new_json':'1',
    'remoteplace':'sizer.yqq.song_next',
    'searchid':'59091538798969282',
    't':'0',
    'aggr':'1',
    'cr':'1',
    'catZhida':'1',
    'lossless':'0',
    'flag_qc':'0',
    'p':'1',
    'n':'20',
    'w':'周杰伦',
    'g_tk':'5381',
    'loginUin':'0',
    'hostUin':'0',
    'format':'json',
    'inCharset':'utf8',
    'outCharset':'utf-8',
    'notice':'0',
    'platform':'yqq.json',
    'needNewCode':'0'    
            }
    # 将参数封装为字典
    res_music = requests.get(url,headers=headers,params=params)
    # 发起请求,填入请求头和参数
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

一个url由两部分组成,?(有时候是“#”)之前是我们请求的地址,?之后是我们的请求所附带的参数。通常,我们会把参数封装成一个字典,添加进请求中去。
它最大的应用是帮助我们应对“反爬虫”技术,将Python爬虫伪装成真正的浏览器,不为服务器所辨识;同时也可以标记这个请求的来源是什么,最终帮助我们拿到想要的信息。

四、Query String Parameters

Preview栏:(后续再补充)

Response栏:(后续再补充)

requests.get()方法params参数用法示例:

复制代码
    Import requests
    # 引用requests模块
    url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
    # 请求歌曲评论的url参数的前面部分
    
    字典名 = { 'g_tk':'5381',
           'loginUin':'0',
          .
          .
          .
          }   # 将参数封装为字典,字典里的参数要给他们打引号,让它们变字符串。
    变量 = requests.get(url, 字典名=params)  #传参
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    

一键添加引号 如何给params直接封装成字典的格式,将headers请求头字符串转为字典

复制代码
    params = dict([line.split(": ",1) for line in a.split("\n")])
    举例: 
    a = ''' nobase64: 1
    musicid: 237773700
    -: jsonp1
    g_tk: 5381
    loginUin: 0
    hostUin: 0
    format: json
    inCharset: utf8
    outCharset: utf-8
    notice: 0
    platform: yqq.json
    needNewCode: 0''' 
    params = dict([line.split(": ",1) for line in a.split("\n")])
    print(params)
    
    封装为函数:
    def get_headers(header_raw):
    """
    通过原生请求头获取请求头字典
    :param header_raw: {str} 浏览器请求头
    :return: {dict} headers
    """
       return dict(line.split(": ", 1) for line in header_raw.split("\n") if line != '')
    
    def get_cookies(cookie_raw):
    """
    通过原生cookie获取cookie字段
    :param cookie_raw: {str} 浏览器原始cookie
    :return: {dict} cookies
    """
    return dict(line.split("=", 1) for line in cookie_raw.split("; "))
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

爬取到的数据存哪里?
详见:学习笔记之函数与模块——Python常用模块一、random(随机模块)openpyxl模块CSV模块

小技巧:如何快速找到想要爬取的内容
在这里插入图片描述

本学习笔记资料由博主从风变编程学习网站整理而来,风变URL: https://www.pypypy.cn/

全部评论 (0)

还没有任何评论哟~