爬虫笔记8:如何处理不信任的SSL证书的网站、cookie的作用、

一、如何处理不信任的SSL证书的网站
比如国家税务总局发票查验平台(https://inv-veri.chinatax.gov.cn/)
在这里插入图片描述
爬取时就会报错:
在这里插入图片描述
处理方法:get()中的参数verify设置为False(默认是True)
在这里插入图片描述
二、cookie的作用
cookie通过记录用户信息来确定身份
用处:
1、模拟登录
以模拟登录人人网为例:
目标url:http://www.renren.com/974676254/profile( 登录后的个人主界面)
发起请求
获得响应
在这里插入图片描述
备注:cookie是有时效性的,能不加最好。
2、反反爬机制
以12306网站为例:

查票:长沙-北京 26号 --> 查询,G486
在这里插入图片描述
第一个问题:为什么网页中有数据(G486)而在网页的源码中没有呢?(下图检查网页源代码,Ctrl+F,输入G486,结果显示为0)
在这里插入图片描述

在网页中有数据,而网页的的源代码中没有数据,是不是服务器传输了多次数据,导致我们在网页源代码中没有找到。(就相当于浏览器和服务器在聊天)

第二个问题:那么这个关键字(G486)我们该如何找出来呢?(去聊天记录里找,就是network)
我们点击车票‘查询’后,网页整体没有发生变化,但是局部发生了变化。这是前端开发的技术: ajax

解决方案
1 、分析它真正的数据接口 query(即查询的意思)
2 、通过selenium(以后会讲到)
在这里插入图片描述
我们看到Preview中有一些站名的信息,感觉这就是它真正的接口。
再点开Preview的result后,我们看到很多信息。
在这里插入图片描述
后面就是车次信息。在这里插入图片描述
那这就是我们要爬取的信息,并确定目标url是对应的headers中的url。

在这里插入图片描述

import requests


def query():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36',
        'Cookie':'_uab_collina=159490169403897938828076; JSESSIONID=090F384AC50BE0F1AFA3892BE3F6DBE9; _jc_save_wfdc_flag=dc; _jc_save_fromStation=%u957F%u6C99%2CCSQ; _jc_save_toStation=%u5317%u4EAC%2CBJP; RAIL_DEVICEID=bbXqzYOPTc-SPgujxnGkCBr9t3sq0JQoMSYUdg-FxjyQ5IkfcPCNoreXmBAIh2HSrM9Z9awDR5onIQwy4EZ8pAhaGXWYBAH6etIlFc4dyxLudz525GAcRgVX5HLIxOE1orODUNSb9wvTBAJptPms1z5Pz5K6FXES; RAIL_EXPIRATION=1619479086609; _jc_save_toDate=2021-04-23; BIGipServerpool_passport=182714890.50215.0000; route=6f50b51faa11b987e576cdb301e545c4; _jc_save_fromDate=2021-04-26; BIGipServerportal=3067347210.16671.0000; BIGipServerotn=1725497610.50210.0000'
    }
    response = requests.get('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-04-26&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=BJP&purpose_codes=ADULT',headers=headers)

    print(response.content.decode('utf-8'))
   
query()

结果:

在这里插入图片描述
实际上,结果是一个json类型的str,我们用requests自带的方法json()获得python字典。代码如下:
在这里插入图片描述
所以得到了一个列表,里面包含几个字符串。

import requests


def query():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36',
        'Cookie':'_uab_collina=159490169403897938828076; JSESSIONID=090F384AC50BE0F1AFA3892BE3F6DBE9; _jc_save_wfdc_flag=dc; _jc_save_fromStation=%u957F%u6C99%2CCSQ; _jc_save_toStation=%u5317%u4EAC%2CBJP; RAIL_DEVICEID=bbXqzYOPTc-SPgujxnGkCBr9t3sq0JQoMSYUdg-FxjyQ5IkfcPCNoreXmBAIh2HSrM9Z9awDR5onIQwy4EZ8pAhaGXWYBAH6etIlFc4dyxLudz525GAcRgVX5HLIxOE1orODUNSb9wvTBAJptPms1z5Pz5K6FXES; RAIL_EXPIRATION=1619479086609; _jc_save_toDate=2021-04-23; BIGipServerpool_passport=182714890.50215.0000; route=6f50b51faa11b987e576cdb301e545c4; _jc_save_fromDate=2021-04-26; BIGipServerportal=3067347210.16671.0000; BIGipServerotn=1725497610.50210.0000'
    }
    response = requests.get('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-04-26&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=BJP&purpose_codes=ADULT',
        headers=headers)

#   print(response.content.decode('utf-8'))
    return response.json()['data']['result']   #requests自带的方法json(),得到python字典

for i in query():
    # print(i)
    tem_list = i.split('|')
    # 定义一个下标 给每个数据做个下标
    # j = 0 
    # for n in tem_list:
    #     print(j,n)
    #     j += 1
    # 通过以上的测试我们知道了 列出是下标索引为3的数据 软卧是下标索引为23的数据
    if tem_list[23] != '无' and tem_list[23] != '':
        print(tem_list[3],'有票',tem_list[23])
    else:
        print(tem_list[3],'无票')

结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值