常见的反爬

爬虫流程

  1. 确定爬虫对象(爬哪个网页的数据)
  2. 找接口
    • 有接口:直接对接口发送请求

      • 成功(直接json解析)
      • 失败就进入下一步
    • 没有接口,直接进入下一步
  3. 用requests直接对网页地址发送请求
    • 请求成功 -> 解析数据(bs4、lxml)
    • 请求失败 -> 尝试添加user-agent和cookie,成功就解析,失败进入下一步
  4. 用selenium打开网页,获取网页内容
    • 请求成功 -> 解析数据(bs4、lxml)
    • 请求失败 -> 找失败的原因,尝试解决失败的问题 -> 问题无法解决进入下一步
  5. 放弃,换一个目标

英雄联盟皮肤爬虫

import requests
import osdef get_all_hero_id():url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'response = requests.get(url)return [hero['heroId'] for hero in response.json()['hero']]def get_one_hero_skins(hero_id):# 1.对皮肤接口发送请求url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'response = requests.get(url)result = response.json()# 2.获取数据# 英雄名字hero_name = result['hero']['name']if not os.path.exists(f'./英雄皮肤/{hero_name}'):os.mkdir(f'./英雄皮肤/{hero_name}')# 所有皮肤for skin in result['skins']:# 获取皮肤名称和图片地址skin_name = skin['name'].replace('/', ' ')img_url = skin.get('mainImg')if not img_url:continue# 下载图片img_data = requests.get(img_url).contentopen(f'./英雄皮肤/{hero_name}/{skin_name}.jpg', 'wb').write(img_data)print('皮肤下载成功!')if __name__ == '__main__':# 创建英雄信息对应的文件夹if not os.path.exists('./英雄皮肤'):os.mkdir('./英雄皮肤')hero_ids = get_all_hero_id()for h_id in hero_ids:get_one_hero_skins(h_id)print('========皮肤全部下载完成==========')

requests使用代理IP

获取代理IP的方法:

import requestsdef get_html(url):headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'}# 1. 使用代理: 给参数proxies赋值# {'https': 'ip:端口'}# 1)使用固定的代理ipresponse = requests.get(url, headers=headers, proxies={'https': '36.25.226.139:4513'})# 2)通过请求获取代理ip的地址动态获取最新的代理# ip = requests.get('http://d.jghttp.alicloudecs.com/getip?num=1&type=1&pro=&city=0&yys=0&port=11&time=4&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1&regions=').text.strip()# response = requests.get(url, headers=headers, proxies={'https': ip})# response = requests.get(url, headers=headers)print(response.text)return response.textif __name__ == '__main__':url = 'https://movie.douban.com/top250'get_html(url)

selenium使用代理IP

from selenium.webdriver import Chrome, ChromeOptionsoptions = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})# 1. 使用代理
# --proxy-server=http://IP:端口号    (ip端口是https的ip)
options.add_argument('--proxy-server=http://122.6.202.214:4510')b = Chrome(options=options)b.get('https://movie.douban.com/top250')

requests自动登录

requests完成自动登录的步骤:

  1. 在谷歌浏览器中打开网页完成登录操作,然后刷新页面
  2. 打开当前页面的检查,在network的All选项下,找到当前页面的请求,获取Request Headers中的cookie值
  3. 在用requests发送请求的时候给headers赋值,在headers中添加cookie对应的键值对
import requestsheaders = {'cookie': '_zap=b7912ec1-8e24-4d72-81cd-8fa2a2b5f78f; d_c0="AECfz77blxSPTv9pswdcr3xSHE0eCEMj0Dc=|1646568427"; _xsrf=qy8EtuCtpOGgIUmA3g0qSi2edFqOUIBw; __snaker__id=kvuiOSuliPGkosHY; _9755xjdesxxd_=32; YD00517437729195%3AWM_TID=pJYUp8Detk5AUUUUFFc6upRtNshfmnQX; q_c1=51a6e1898c4d46a594865b3db1dd3e95|1647227093000|1647227093000; NOT_UNREGISTER_WAITING=1; gdxidpyhxdE=q6eDxuI%5CS11auZ9%2Be%5C%2BxIx%2F2cg96ULLZchHGSiL8EQvgYs9OmbeiyhhCXoa%5C%2BblJQfD%5CayzzA8oosyB%2FhPPMm7%2Fkd8W5prCdSYuppYUL5qdoyPdjsHcgA8pZgBquceXtX6di5Mu46C7dEKcHakVA7mxxjMZh%2Bre5j%2F4AQta4bulZ39y%5C%3A1647834647437; YD00517437729195%3AWM_NI=oe9bRvHOQTEjCNug5CHPzre%2BCdBGZr6dru1M9KaaTCyY5hZsiM2d%2FSXjfLKsl91VYoTN6x%2Fvc%2FWYtZWgHtA%2BkNpQdcQgt86C%2F1Vffl9dc8gqk08aF1%2Bp0LL%2BSZzsecFXbUI%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee99e96f86e9ada5f97cbaac8aa3c84f878a9a85aa7afbeeac8cc97e8c989f8bb32af0fea7c3b92aadbbf783d17e8c919fb5c8628192bb88b8498c90b693e82181bc8ea8d97af6bcbe96b447fb95af82d749bb87fb89d979ab93fe85ae599cb6aaadca79b0e7ffb7dc659892fa99ae7ea1f199baf75295b98895c421a992c0b2e76993b9bcd9b549edef9a87e568fbbcadd9e67ba9f0f882c53be9b000adcf219186b694e8698688aeb6cc37e2a3; captcha_session_v2=2|1:0|10:1647833755|18:captcha_session_v2|88:Q0FUYjlIemk4MklmZlA5ZlVOWDczbGlhYjRabzMxME1Fc0N6Szl4aGVTQU5JQkdGUklNWFRBVVZtU0hYQUVvLw==|cf267f149c0b9509d0e424579194d94fc6ec1f57567afd34050dc2a47f14bacc; captcha_ticket_v2=2|1:0|10:1647833769|17:captcha_ticket_v2|704:eyJ2YWxpZGF0ZSI6IkNOMzFfZ2pLT21aR2FUbHdXWFo2SG9wTUY1OWRZTG0tcG1vcGlfNUtrUkpzUThJSmNlV2VJdVVzdEhWNks4TVNBcVhobEZPUkZMcjUuc3N1QXpmUzBHbnIuSUNIdjlnb04tdjdoMlBydUtGSmdmV2FYUUZ2SE10dUl0RU40TzRFQS14dEhtMXJRLWg3UHdRblRMVkt1VG1kX09oekdab0pzUGxUWGFmUVF1NzRfYjc4di1QUmlQVUJMR0s5TEhvTGpDX2JUMF9jNFllNlM1SVFYSGgtMHAwV1ZMR2IwMWVqMS5FdEg1ZzZHRUZNZWMwLU8uMXk3YnY2dzlHdGNmNEE1a3E2Ry5EOWJSVlN4QjRWWmZodU1Gdk54N2lvNkZNUjJCdmw4Q254R1NUeUhtLXI1Yl9xeEZPS00wLnJONjkweW14cTQ5MHNjUzBKeHBwUE9lY05BSDZyNV9Vb3ZxZkFkR191aEQwOGc5ZUkwR3k5X005QVkub3gxOS5QdE1GanQwc1dtNERVbVZwQ3ZJV3R4V21nUS5Nd0tVTk92U3N1ZFlmcXJGMmhIWjUyTXZZUzFLc1RQaGlTNTRQWDRETElCdXQuNmU0ZUpzUFUyUzBWeUJZUXE5WFZSOEUwYzE5MEVYX2x5cEJ2MVdManBzVXJlV0t3d19GcGhTLnguVnlGMyJ9|22db975942e5d8c1799fa7c70120378eed6a34bb8bdd00afa3c5eccf92436296; z_c0=2|1:0|10:1647833781|4:z_c0|92:Mi4xaW5CWUdRQUFBQUFBUUpfUHZ0dVhGQ1lBQUFCZ0FsVk50VUFsWXdEWFYyXzVOZVRzbGJmbVg4Mk1GNF95bUYtLWd3|9d5f40b82ca91b89a903d5d50df74ed66850c2b3ecf03d86510300f5eb729d96; tst=r; SESSIONID=hbQ6zfAEKL3cjwOoewSAbkpnJKR4GtTVNCDhhjrorQ2; KLBRSID=0a401b23e8a71b70de2f4b37f5b4e379|1647833814|1647833734','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
response = requests.get('https://www.zhihu.com/', headers=headers)print(response.text)

selenium自动登录获取cookie

from selenium.webdriver import Chrome# 1. 获取cookie保存到本地
# 第一步:创建浏览器对象,打开需要自动登录的网站
b = Chrome()
b.get('https://www.taobao.com/')# 2. 手动完成登录操作
input('是否完成:')# 3. 获取cookie数据并且保存到本地文件中
cookies = b.get_cookies()
open('files/taobao.txt', 'w', encoding='utf-8').write(str(cookies))

selenium自动登录使用cookie

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys# 1. 创建浏览器对象打开网页
b = Chrome()
b.get('https://www.taobao.com/')# 2. 添加本地保存的cookie信息
cookie_list = eval(open('files/taobao.txt', encoding='utf-8').read())
for cookie in cookie_list:b.add_cookie(cookie)# 3.重新打开网页
b.get('https://www.taobao.com/')# 4. 进行后续其他操作
search = b.find_element_by_id('q')
search.send_keys('雪糕')
search.send_keys(Keys.ENTER)

瓜子二手车字体反爬

  1. 打开当前页面的检查,在network的All选项下,在Name中找到带woff或woff2的选项,获取Headers中的Request URL地址
  2. 复制地址在新页面中打开下载文件
  3. 用FontEditor打开文件获取解码方式
import requests
from bs4 import BeautifulSoup
import reheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
url = 'https://mapi.guazi.com/car-source/carList/pcList?page=1&pageSize=12&city_filter=12&city=12&guazi_city=12&tag_types=18&versionId=0.0.0.0&osv=IOS&platfromSource=wap'
response = requests.get(url, headers=headers)table = {'0xe1d0': '7', '0xe325': '4', '0xe41d': '1', '0xe52e': '9', '0xe630': '2', '0xe76e': '8','0xe891': '5', '0xe9ce': '0', '0xeaf2': '3', '0xec4c': '6', '0xf88a': '7'
}
# hex(十进制数)  -  将10进制转换成16进制
all_car = response.json()['data']['postList']
for car in all_car:price = car['price'].split(';')new_price = ''for x in price:if x.startswith('&#'):new_price += table[hex(int(x[2:]))]elif x.startswith('.&#'):new_price += '.' + table[hex(int(x[3:]))]else:new_price += xprint(new_price)

#’):
new_price += table[hex(int(x[2:]))]
elif x.startswith(’.&#’):
new_price += ‘.’ + table[hex(int(x[3:]))]
else:
new_price += x
print(new_price)


Python爬虫:常见的反爬相关推荐

  1. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些

    爬虫常见的反爬措施有三种: 1.header头部信息 解决方法: 加User-Agent值: 如果不加header头,部分网站服务器判断不到用户的访问来源,所以会返回一个404错误来告知你是一个爬虫, ...

  2. Python爬虫:字体反爬处理(猫眼+汽车之家)-2018.10

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 -全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Django笔 ...

  3. Python爬虫---猫眼字体反爬

    在做过汽车之家论坛的字体反爬过后,信心稍微增长点,那么索性找点字体文件反爬的网址,猫眼便是一个不错的网址,那么便开始搞起来. 目标网址 https://piaofang.maoyan.com/?ver ...

  4. python网络爬虫系列(八)——常见的反爬手段和解决方法

    常见的反爬手段和解决思路 学习目标 了解 服务器反爬的原因 了解 服务器常反什么样的爬虫 了解 反爬虫领域常见的一些概念 了解 反爬的三个方向 了解 常见基于身份识别进行反爬 了解 常见基于爬虫行为进 ...

  5. Python | 常见的反爬及解决方法,值得收藏

    我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术. 很多人学习python,不知道从何学起. 很多人学习python, ...

  6. Python常见的反爬及解决方法,值得收藏

    我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术. 首先我们来看一下爬虫程序和反爬虫之间的一张逻辑图: 以下说4种网站 ...

  7. 爬虫之常见的反爬手段和解决思路

    1 服务器反爬的原因 爬虫占总PV(PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv)比例较高,这样浪费钱(尤其是三月份爬虫). 三月份爬虫是个什么概念呢?每年的三月份我们会迎接一次爬虫高 ...

  8. 【爬虫进阶】常见的反爬手段和解决方法(建议收藏)

    爬虫进阶:常见的反爬手段和解决思路 1 服务器反爬的原因 2 服务器常反什么样的爬虫 3 反爬虫领域常见的一些概念 4 反爬的三个方向 5 常见基于身份识别进行反爬 5.1 通过headers字段来反 ...

  9. 爬虫中常见的反爬手段和解决方法

    每日分享: 欲成大树,莫与草争:将军有剑,不斩草蝇:遇烂入及时止损,遇烂事及时抽身.格局小的人喜欢诋毁和嫉妒,因为我不好,我也不想让你好.格局大的人都懂得一个道理,强者互帮,弱者互撕.人性最大的愚蠢就 ...

最新文章

  1. OpenCV error: Cannot load info library for OpenCV
  2. 结合项目实例 回顾传统设计模式(九)迭代器模式
  3. JSP由浅入深(1)—— 熟悉JSP服务器
  4. ITK:Delaunay贴合边缘翻转
  5. 机器学习实战-决策树-22
  6. 服务器:Nginx - 最小配置说明
  7. 西门子scl语言编程手册_西门子SCL编程PEEK指令讲解
  8. TQ210——按键(中断查询法)
  9. 高级service之ipc ADIL用法
  10. 用Typescript如火如荼地进行angular.js
  11. 前端开发技术:HTML5 JS 前端开发主要功能!
  12. vue 第八天 小结 作业模拟购物车
  13. 《Excel 职场手册:260招菜鸟变达人》一第 37 招 用条件格式制作项目进度图
  14. 贪心 Codeforces Round #303 (Div. 2) B. Equidistant String
  15. q-learning_教计算机如何通过Q-Learning玩Snake
  16. 隐马尔可夫模型(HMM)
  17. RFID定位技术下的资产管理与应急仓储物流--RFID资产管理--新导智能
  18. Python代码规范之---代码不规范,亲人两行泪
  19. Linux版本加载过程异响,完美解决Ubuntu Linux关机异响[SATA硬盘]
  20. 移动端事件touchstart、touchmove、touchend详解

热门文章

  1. 概率dp总结 正在更新
  2. java打飞机小游戏(跟着网上视频写到)
  3. linux 如何查看端口被哪个进程占用,如何查看linux端口被哪个进程占用
  4. 古代穷人缺医少药时的救命五十秘方
  5. http 500 错误总结
  6. 几款围巾打法和冬装搭配
  7. 基于Labview双通道频谱滤波器的设计
  8. java计算机毕业设计精准扶贫项目管理系统源码+mysql数据库+系统+lw文档+部署
  9. kafka启动失败The Cluster ID *** doesn‘t match stored clusterId Some(***) in meta.properties The broker
  10. 程序员频繁跳槽,将被列入失信名单!