python做反被爬保护的方法

网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护。于是,很多网站开始反网络爬虫,想方设法保护自己的内容。

一: User-Agent +Referer检测

User-Agent 是HTTP协议的中的一个字段, 其作用是描述发出HTTP请求的终端的一些信息。

使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

服务器通过这个字段就可以知道访问网站的是什么人。对于不是正常浏览器的用户进行屏蔽。

解决方案:

伪装浏览器的User-Agent,因为每个浏览器的User-Agent不一样,并且所有的用户都能使用浏览器。所有每次请求的时候条件浏览器的User-Agent,就能解决UA检测

Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的。例如有一些图片网站在你请求图片的时候,就会检测你的Referer值,如果Referer不符合,不会返回正常的图片。

解决方案:

在检测referer的请求中,携带符合的referer值。

二: js混淆和渲染

所谓 JavaScript 混淆,基本就是:

1.去掉一些实际没有调用的函数。

2.将零散的变量声明合并。

3.逻辑函数的精简。

4.变量名的简化。具体要看不同的压缩工具的考虑优劣。常见的有UglifyJS、JScrambler等工具。

js渲染其实就是对HTML页面的修改。比如有一些网页本身没有返回数据,数据是经过js加载之后添加到HTML当中的。当遇到这种情况的时候,我们要知道爬虫是不会执行JavaScript操作。所以需要用其他的方法处理。

解决方案:

1.通过阅读网站js源码,找到关键的代码,并用python实现。

2.通过阅读网站js源码,找到关键的代码,用PyV8,execjs等库直接执行js代码。

3.通过selenium库直接模拟浏览器环境

三:IP限制频次

WEB系统都是走http协议跟WEB容器连通的,每次请求至少会产生一次客户端与服务器的tcp连接。

对于服务端来说可以很清楚的查看到,一个ip地址在单位时间内发起的请求。

当请求数超过一定的值之后,就可判断为非正常的用户请求。

解决方案:

1.自行设计ip代理池,通过轮换的方式,每次请求携带不同的代理地址。

2.ADSL动态拨号他有个独有的特点,每拨一次号,就获取一个新的IP。也就是它的IP是不固定的。

四:验证码

验证码(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and HumansApart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。

这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

解决方案:

1.手动识别验证码

2.pytesseract识别简单的验证码

3.对接打码平台

4.机器学习

扩展知识:

基于反爬的相关实例代码:

#! /usr/bin/env python3.4
#-*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
 
import urllib.request
import random
import re
 
url='http://www.whatismyip.com.tw'
iplist=['121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843']
 
proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36')]
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
 
pattern = re.compile('<h1>(.*?)</h1>.*?<h2>(.*?)</h2>')
iterms=re.findall(pattern,html)
for item in iterms:
  print(item[0]+":"+item[1])
#! /usr/bin/env python
# -*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
from selenium import webdriver
import time
import re
 
drive = webdriver.PhantomJS(executable_path='phantomjs-2.1.1-linux-x86_64/bin/phantomjs')
drive.get('https://mm.taobao.com/self/model_info.htm?user_id=189942305&is_coment=false')
 
time.sleep(5)
 
pattern = re.compile(r'<div.*?mm-p-domain-info">.*?class="mm-p-info-cell clearfix">.*?<li>.*?<label>(.*?)</label><span>(.*?)</span>',re.S)
html=drive.page_source.encode('utf-8','ignore')
items=re.findall(pattern,html)
for item in items:
  print item[0],'http:'+item[1]
drive.close()
(0)

相关推荐

  • Python3爬虫学习之应对网站反爬虫机制的方法分析

    本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法.分享给大家供大家参考,具体如下: 如何应对网站的反爬虫机制 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略. 例如打开搜狐首页,先来看一下Chrome的头信息(F12打开开发者模式)如下: 如图,访问头信息中显示了浏览器以及系统的信息(headers所含信息众多,具体可自行查询) Python中urllib中的request模块提供了模拟浏览器访问的功能,代码如下: from

  • python通过伪装头部数据抵抗反爬虫的实例

    0x00 环境 系统环境:win10 编写工具:JetBrains PyCharm Community Edition 2017.1.2 x64 python 版本:python-3.6.2 抓包工具:Fiddler 4 0x01 头部数据伪装思路 通过http向服务器提交数据,以下是通过Fiddler 抓取python没有伪装的报文头信息 GET /u012870721 HTTP/1.1 Accept-Encoding: identity Host: blog.csdn.net User-Ag

  • Python反爬虫技术之防止IP地址被封杀的讲解

    在使用爬虫爬取别的网站的数据的时候,如果爬取频次过快,或者因为一些别的原因,被对方网站识别出爬虫后,自己的IP地址就面临着被封杀的风险.一旦IP被封杀,那么爬虫就再也爬取不到数据了. 那么常见的更改爬虫IP的方法有哪些呢? 1,使用动态IP拨号器服务器. 动态IP拨号服务器的IP地址是可以动态修改的.其实动态IP拨号服务器并不是什么高大上的服务器,相反,属于配置很低的一种服务器.我们之所以使用动态IP拨号服务器,不是看中了它的计算能力,而是能够实现秒换IP. 动态IP拨号服务器有一个特点,就是每

  • python解决网站的反爬虫策略总结

    本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度(防止静态爬虫使用ajax技术动态加载页面). 1.从用户请求的Headers反爬虫是最常见的反爬虫策略. 伪装header

  • python网络爬虫之如何伪装逃过反爬虫程序的方法

    有的时候,我们本来写得好好的爬虫代码,之前还运行得Ok, 一下子突然报错了. 报错信息如下: Http 800 Internal internet error 这是因为你的对象网站设置了反爬虫程序,如果用现有的爬虫代码,会被拒绝. 之前正常的爬虫代码如下: from urllib.request import urlopen ... html = urlopen(scrapeUrl) bsObj = BeautifulSoup(html.read(), "html.parser") 这

  • python做反被爬保护的方法

    网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护.于是,很多网站开始反网络爬虫,想方设法保护自己的内容. 一: User-Agent +Referer检测 User-Agent 是HTTP协议的中的一个字段, 其作用是描述发出HTTP请求的终端的一些信息. 使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等. 服务器通过这个字

  • python实现文件快照加密保护的方法

    本文实例讲述了python实现文件快照加密保护的方法.分享给大家供大家参考.具体如下: 这段代码可以对指定的目录进行扫描,包含子目录,对指定扩展名的文件进行SHA-1加密后存储在cvs文件,以防止文件被篡改 调用方法:python snapper.py > todayCheck.csv # Hello, this is a script written in Python. See http://www.pyhon.org # # Snapper 1.2p # # This script wil

  • Python 做曲线拟合和求积分的方法

    这是一个由加油站油罐传感器测量的油罐高度数据和出油体积,根据体积和高度的倒数,用截面积来描述油罐形状,求出拟合曲线,再用标准数据,求积分来验证拟合曲线效果和误差的一个小项目. 主要的就是首先要安装Anaconda  python库,然后来运用这些数学工具. ###最小二乘法试验### import numpy as np import pymysql from scipy.optimize import leastsq from scipy import integrate ###绘图,看拟合效

  • 基于Python的Post请求数据爬取的方法详解

    为什么做这个 和同学聊天,他想爬取一个网站的post请求 观察 该网站的post请求参数有两种类型:(1)参数体放在了query中,即url拼接参数(2)body中要加入一个空的json对象,关于为什么要加入空的json对象,猜测原因为反爬虫.既有query参数又有空对象体的body参数是一件脑洞很大的事情. 一开始先在apizza网站 上了做了相关实验才发现上面这个规律的,并发现该网站的请求参数要为raw形式,要是直接写代码找规律不是一件容易的事情. 源码 import requests im

  • Requests什么的通通爬不了的Python超强反爬虫方案!

    一.前言 一个非常强的反爬虫方案 -- 禁用所有 HTTP 1.x 的请求! 现在很多爬虫库其实对 HTTP/2.0 支持得不好,比如大名鼎鼎的 Python 库 -- requests,到现在为止还只支持 HTTP/1.1,啥时候支持 HTTP/2.0 还不知道. Scrapy 框架最新版本 2.5.0(2021.04.06 发布)加入了对 HTTP/2.0 的支持,但是官网明确提示,现在是实验性的功能,不推荐用到生产环境,原文如下: " HTTP/2 support in Scrapy is

  • python range()函数取反序遍历sequence的方法

    python中的range函数取反序有两种方式 第一种:先构建一个列表,然后对列表中的元素进行反转. 例如: a=range(5) for i in reversed(a): print(i) #4 3 2 1 0 第二种:是利用range()函数本身的特点来进行反序. 例如: for i in range(4,-1,-1): print(i) #4 3 2 1 0 range(a,b)函数只包括前面的a,不包括后面的b,步长默认为1. 以上这篇python range()函数取反序遍历sequ

  • 详解selenium + chromedriver 被反爬的解决方法

    问题背景:这个问题是在爬取某夕夕商城遇到的问题,原本的方案是用selenium + chromedriver + mitmproxy开心的刷,但是几天之后,发现刷不出来了,会直接跳转到登陆界面(很明显,是遭遇反爬了) 讲实话,这还是第一次用硒被反爬的,于是进行大规模的测试对比. 同台机器,用铬浏览器正常访问是不用跳转到登陆界面的,所以不是IP的问题.再用提琴手抓包对比了一下两个请求头,请求头都是一样的,所以忽略标头的反爬. 最后通过分析,可能是硒被检测出来了.于是就去查资料.大概的查到是和web

  • python cookie反爬处理的实现

    Cookies的处理 作用 保存客户端的相关状态 在爬虫中如果遇到了cookie的反爬如何处理? 手动处理     在抓包工具中捕获cookie,将其封装在headers中     应用场景:cookie没有有效时长且不是动态变化 自动处理  使用session机制  使用场景:动态变化的cookie  session对象:该对象和requests模块用法几乎一致.如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中. 案例 爬取

  • python之PyAutoGui教你做个自动脚本计算器的方法

    前提环境准备 python3+pillow+pyautogui 先提前安装好python3以及pillow和pyautogui模块 这里介绍一下模块安装方法 pip install pillow pip install pyautogui pip install opencv-python 最终效果是利用python脚本模拟电脑计算器进行自动计算,相当于模拟人去点击自带的计算器进行运算,想要做到这一点需要有两个条件: 1.模拟鼠标和键盘的输入工作 2.识别计算器按钮的位置 先来看一下win10电

  • python tkinter 做个简单的计算器的方法

    背景 最近本菜鸡在学习 python GUI,从 tkinter 入门,想先做个小软件练习一下 思来想去,决定做一个 计算器 设计思路 首先,导入我们需要的包 - tkinter,并通过 实例化一个 Tk 对象 创建窗口 因为我有点菜,目前还把控不好各组件的位置,所以窗口使用自动默认的大小 import tkinter as tk import tkinter.messagebox win = tkinter.Tk() win.title("计算器") win.mainloop() 大

随机推荐