目录

  • cookie
  • session
  • 爬取ssl证书有问题的网站
  • 正则表达式

cookie

cookie网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息,通过在客户端记录的信息确定用户身份。cookie可以用于反爬,针对这种情况,需要在请求头部中添加cookie,才能在爬取时获得想要的信息。
网站举例:2020年有一段时间要浏览知乎内容,会自动跳转到登陆界面,强制要求登录才能浏览。(目前不再强制要求)
以知乎热榜https://www.zhihu.com/hot为例。首先在浏览器中登录账号,登录之后可以拿到cookie。许多要求登录的网站都有针对cookie的反爬机制,在爬虫里没有添加cookie或者cookie不对,都不能拿到想要的数据。
爬取网站时一般都要添加请求头部,该头部是一个字典,我们在浏览器中拿到请求头部的字符串的形式如下:

'''
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: BAIKE_SHITONG=%7B%22data%22%3A%22657c3a8ab130bf
'''

可以用查找替换和正则表达式很方便地将字符串转为字典的形式

查找栏输入:(.+): (.+)$
替换栏输入:"$1": "$2",
import requests
url = 'https://www.zhihu.com/hot'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari/537.36','cookie': '_xsrf=1SMkDEbBof93pTCRd5MmPz8cmmOuAsaU; _zap=3a8fd847-c5d4-45cf-84a3-24d508f580f6; ''_ga=GA1.2.2058930090.1594280819; d_c0="AICeuVa2jBGPTuvzpsC3VFkq3TulCqxCfNQ=|1594280816"; tshl=; ''q_c1=7c1d10a0c4d44df7827bd63892a65ad9|1607330850000|1602672699000; ''r_cap_id="NmUwNzZjZDRjYTdhNDM4ODg2YTlkNmZkYTkxNjE3Zjk=|1607510595''|a6f49873875ddab93fe0ea6af008d72f5b96f328"; ''cap_id="ZWY2YWYwZjQxMzEwNDBjZDhhNTUyNGE4NTEyYzM3MDk=|1607510595''|baf8c8f94ab9f64c28903ff63e86885944f8b9e9"; ''l_cap_id="MmQ0MjMwYzlkZDgyNGZmZGI5YTgxYzY5ZjJiNDZlZGM=|1607510595''|3a728f63321b9be4977408d133ceeecc661802b4"; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1607330701,''1607493058,1607510544,1608122090; ''capsion_ticket="2|1:0|10:1608122089|14:capsion_ticket|44:ZTdmNjMyMGFiNWJkNDNkYTk5YzI2MmI5M2M5MjY5ZmU''=|f187b250302c7a498c8c732fcd607826b412c49c64a39eb7b6047c9860a40f7b"; ''SESSIONID=36rAEHCFhr1qyxSxYpI5oe64a5Bl7J5Rh8rx4GF0B89; ''JOID=V14dBUzOhEkq2abnFM1FVigSNGkI_rw1ap7tqlyk9XZVody3Yil6n3bYq-cbXHSWbCgf_7Nw3niJHKJtQ0JRyG0=; ''osd=V1oSB0_OgEYo2qbjG89GViwdNmoI-rM3aZ7ppV6n9XJao9-3ZiZ4nHbcpOUYXHCZbisf-7xy3XiNE6BuQ0Zeym4=; ''z_c0="2|1:0|10:1608122116|4:z_c0|92'':Mi4xRjdYeENBQUFBQUFBZ0o2NVZyYU1FU1lBQUFCZ0FsVk5CRTNIWUFES1pINUJzUjZxOU1tQm5XZi1xdjdyeUdPVGN3''|068ae1decd315ee1b801a77a0883209667cfbf783ef837728ce15dce546b8556"; ''unlock_ticket="AJAuW3hlfA0mAAAAYAJVTQwG2l8id1FVAAOGj42l8skGeU5lNRJLHg=="; ''Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1608122118; tst=h; ''KLBRSID=975d56862ba86eb589d21e89c8d1e74e|1608122129|1608122089 '
}res = requests.get(url, headers=headers)
print(res.content.decode('utf-8'))

session

HTTP是无状态协议,服务端需要记录用户状态就用某种机制来识别用户,这个机制就是Session。session保存在服务端,有唯一标识。session用来确定用户的身份和保持会话
模拟登录的案例:
需求:突破12306的图片验证码 {result_message: “验证码校验成功”, result_code: “4”},获取车次、剩余座位信息
12306网站采用了ajax技术,爬取车次信息时会发现在网页中有数据而在网页的源码中没有该数据。
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
针对这种情况,我们需要找到在车次信息查询页面上点击查询按钮时的request url,爬取该url才能获得想要的数据

分析:获取图片验证码的网址为:

https://kyfw.12306.cn/passport/captcha/captcha-check?

访问该url应当用post方式,在发起请求时在post的data中传递正确图片的xy坐标。data形式如下,answer对应验证码坐标。

codeStr = input('请输入验证码坐标:')data = {'answer': codeStr,'rand': 'sjrand','login_site': 'E'}

这个坐标可以用qq的截图功能获得,从整张验证码图片的左上角开始截取,鼠标放在正确图片的位置,这时可以要截取图片的像素大小,这就是要用的xy坐标。如果有多个图片,比如图片1、图片2,坐标的填写方式应该是x1,y1,x2,y2

#   {result_message: "验证码校验成功", result_code: "4"}
import requests
req = requests.session()  # 保持会话
def login():# 获取图片pic_response = req.get('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand')codeImage = pic_response.contentfn = open('code2.png', 'wb')fn.write(codeImage)fn.close()headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari/537.36 '}codeStr = input('请输入验证码坐标:')data = {'answer': codeStr,'rand': 'sjrand','login_site': 'E'}response = req.post('https://kyfw.12306.cn/passport/captcha/captcha-check', data=data, headers=headers)print(response.content.decode('utf-8'))login()

爬取ssl证书有问题的网站

爬取这种网站需要在requests.get函数中传递verify参数,值为False

import requestsheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari/537.36 '
}
url = 'https://inv-veri.chinatax.gov.cn/'
res = requests.get(url, headers=headers, verify=False)
print(res.text)

正则表达式

python自带正则表达式相关的模块,名称为re

import re# re.match(pattern, string, flags=0)
# 第一个参数 正则表达式的模块
# 第二个参数 表示要匹配的数据
# 第三个参数 标致位 用于控制正则表达式的匹配方式 例如 是否区分大小写、是否多行匹配s = 'python and java'
pattern = 'python'result = re.match(pattern, s)if result:print(result.group())print(result.start())print(result.end())print(result.span())else:print('没有匹配到')

cookie和session的反反爬应用相关推荐

  1. python爬虫(四)cookie模拟登录和反反爬案例

    处理不被信任证书的网站 SSL证书:数字证书的一种,配置在服务器上面的,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. SSL证书的特点:遵循了SSL协议,由收信 ...

  2. 基于requests模块的cookie,session和线程池爬取

    基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...

  3. python爬图片_网络爬虫经验:反爬和反反爬

    我想很多人入门python是图片爬虫,就是HTTP请求,保存一下图片,用python实现非常快.网上很多爬虫的教程就讲到这里,实际上很单一,看了跟没看没什么区别,都是找一下网页的规律,然后Beauti ...

  4. Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”

    有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站植入各种反爬机制 ...

  5. python梨视频爬虫下载,反反爬

    python梨视频爬虫下载,反反爬 跟着b站视频学习,发现和视频里面讲的不一样 视频URL改成ajax异步请求得到的 拿到视频url之后发现居然是个假链接不是真实的 仔细观察真实的视频url发现,刚才 ...

  6. 针对大众点评网上商铺评论字体替换反爬的反反爬

    针对大众点评网上商铺评论字体替换反爬的反反爬 字体替换的反爬,在之前网站出现过,如淘宝.猫眼等.但是主要针对于数字字体替换,由于数字就十个,完全可以手动分析字体文件,找出编码与数字的关系.但是,大众点 ...

  7. 携程反爬中的Eleven参数-反爬与反反爬的奇技淫巧

    http://www.shenjianshou.cn/blog/?p=302 今天我们要聊点什么呢,之前说要聊去哪儿的,不过暂且咱们再放一放,先聊一聊去哪儿的干爹携程吧,上次我记得看了携程工程师霸气回 ...

  8. day 15爬虫与反爬虫与反反爬

    爬虫与反爬虫与反反爬 爬虫的流程: ​ 1.请求网页,获取响应结果 ​ 2.解析网页,提取数据 ​ 3.数据持久化(写入存放位置) 反爬与反反爬 1.User-Agent:将爬虫伪装成浏览器.例如:豆 ...

  9. Python爬虫学习第九天---反爬与反反爬

    反爬与反反爬 一.常见反爬手段和解决思路 1.服务器反爬原因 1.爬虫占总PV比例较高,这样浪费钱. 2.三月份爬虫:每年的三月份我们会迎接一次爬虫高峰期,有大量的硕士在写论文的时候会选择爬取一些往网 ...

  10. Python 从零开始爬虫(一)——爬虫伪装反“反爬”

      之前提到过,有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站 ...

最新文章

  1. Wiki为什么会流行
  2. 【c语言】求n个整数的和
  3. mysql 5.1 备份_mysql 5.1备份到5.0 USING BTREE
  4. java web视频_超全面的JavaWeb视频教程
  5. 人民日报新媒体中心接入神策数据,媒体阅读体验新升级
  6. Could not find a file system implementation for scheme ‘hdfs‘.
  7. WP7应用开发笔记(3) 界面设计
  8. nb模块不能接收公网消息_物联网连接技术之NB-IOT无线技术介绍
  9. 机器学习基础(三十) —— 线性回归、正则化(regularized)线性回归、局部加权线性回归(LWLR)
  10. HDU 2676 Matrix
  11. 大数据分析工具如何选择
  12. 帮助文档或使用说明Chm文档打开后,目录都在,内容为空白,如何解决?
  13. 微信公众号80端口映射详解(一)
  14. C语言if语句中常见的问题
  15. python测量镜头到目标距离,如果从相机(校准)到我的物体的距离是固定的,我如何测量物体的宽度?...
  16. 台式计算机能不能安装蓝牙驱动,台式电脑蓝牙驱动安装失败怎么办?台式电脑蓝牙驱动安装失败解决办法...
  17. c语言基本变量类型以及其对应的占位符
  18. Nice UI - Hacked.io
  19. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)
  20. 机器视觉和计算机视觉理解

热门文章

  1. 百度云8秒视频,怎么破?
  2. HTML中的表格以及对表格样式的处理
  3. struts2升级到2.5版本需要注意的几点
  4. java 排序算法之快速排序(挖坑法)
  5. 唐诗宋词v2.0原理分享
  6. 织梦Dedecms SEO优化技巧
  7. 提交辞职但领导不批准怎么处理
  8. Joint Segmentation of Retinal Layers and Focal Lesions in 3-D OCT Data of Topologically Disrupted Re
  9. 【追踪】山东曲阜孔林附近女子被斩首续:系凶手女友
  10. 关于最简单的敲竹杠病毒的密码破解