关于反爬虫的一些简单总结

爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史。而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走。然而,如果反爬机制过于严格,可能会误伤到真正的用户请求;如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本。

简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作。

1、爬取过程中的302重定向

在爬取某个网站速度过快或者发出的请求过多的时候,网站会向你所在的客户端发送一个链接,需要你去验证图片。我在爬链家和拉钩网的过程中就曾经遇到过:

对于302重定向的问题,是由于抓取速度过快引起网络流量异常,服务器识别出是机器发送的请求,于是将请求返回链接定到某一特定链接,大多是验证图片或空链接。

在这种时候,既然已经被识别出来了,就使用代理ip再继续抓取。

2、headers头文件

有些网站对爬虫反感,对爬虫请求一律拒绝,这时候我们需要伪装成浏览器,通过修改http中的headers来实现

headers = {
'Host': "bj.lianjia.com",
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
'Accept-Encoding': "gzip, deflate, sdch",
'Accept-Language': "zh-CN,zh;q=0.8",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36",
'Connection': "keep-alive",
}
p = requests.get(url, headers=headers)
print(p.content.decode('utf-8'))

3、模拟登陆

一般登录的过程都伴随有验证码,这里我们通过selenium自己构造post数据进行提交,将返回验证码图片的链接地址输出到控制台下,点击图片链接识别验证码,输入验证码并提交,完成登录。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys #
from selenium.webdriver.support.ui import WebDriverWait # WebDriverWait的作用是等待某个条件的满足之后再往后运行
from selenium.webdriver import ActionChains
import time
import sys
driver = webdriver.PhantomJS(executable_path='C:\PyCharm 2016.2.3\phantomjs\phantomjs.exe') # 构造网页驱动

driver.get('https://www.zhihu.com/#signin')  # 打开网页
driver.find_element_by_xpath('//input[@name="password"]').send_keys('your_password')
driver.find_element_by_xpath('//input[@name="account"]').send_keys('your_account')
driver.get_screenshot_as_file('zhihu.jpg')     # 截取当前页面的图片
input_solution = input('请输入验证码 :')
driver.find_element_by_xpath('//input[@name="captcha"]').send_keys(input_solution)
time.sleep(2)

driver.find_element_by_xpath('//form[@class="zu-side-login-box"]').submit() # 表单的提交 表单的提交,即可以选择登录按钮然后使用click方法,也可以选择表单然后使用submit方法
sreach_widonw = driver.current_window_handle  # 用来定位当前页面
# driver.find_element_by_xpath('//button[@class="sign-button submit"]').click()
try:
dr = WebDriverWait(driver,5)
# dr.until(lambda the_driver: the_driver.find_element_by_xpath('//a[@class="zu-side-login-box"]').is_displayed())
if driver.find_element_by_xpath('//*[@id="zh-top-link-home"]'):
print('登录成功')
except:
print('登录失败')
driver.save_screenshot('screen_shoot.jpg')  #截取当前页面的图片
sys.exit(0)
driver.quit() #退出驱动

这里面,PhantomJS是一个很棒的exe,下载地址:phantomjs。他可以模拟浏览器行为进行操作。当我们遇到JS渲染的网页,在使用正则表达式、BS4和xpath . . . 都无法匹配出数据时(数据根本没加载上),可以使用PhantomJS模拟浏览器行为发送请求,将会得到网页的原始全部数据。

4、代理ip

当爬取速度过快时,当请求次数过多时都面临ip被封的可能。因此使用代理也是必备的。

使用request加代理

import requests
proxies = { "http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",}
p = request.get("http://www.baidu.com", proxies = proxies)
print(p.content.decode('utf-8'))

使用urllib加代理

user_agent ='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'
headers = {'User-Agent':user_agent}
proxy = {'http':'http://10.10.1.10:1080',}
proxy_handler = urllib.request.ProxyHandler(proxy)
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)
url = "https://www.baidu.com/"
req = urllib.request.Request(url=url,headers=headers)
res = urllib.request.urlopen(req)
print(res.read().decode('utf-8')) # 打印网页内容

5、验证码输入

遇到验证的问题,我一般都是人工识别:获取验证码的链接再控制台下 ——> 点击链接识别验证码 ——> 在控制台手动输入验证码并提交。

6、ajax加载的数据

对于ajax加载的数据,我们无论通过request或post方法请求得到的网页都无法得到。

关于一个网页是否是ajax加载数据,我们只需将网页内容print到控制台下,将其与网页原始内容进行比对,如果有数据缺失,那么这些数据就是ajax加载。例如:我们想获取京东上商品的价格、销量、好评等方面的数据,但是请求返回的网页中没有这些数据。因为这些数据是ajax加载。对于ajax加载的页面,一般有两种方法。

(1)分析网页

按F12打开浏览器调试工具,在Network下选择XHR或Doc标签,分析(双击点开查看)这两个标签下的链接。如果点开链接打开的网页中正好有那些没有加载的数据,则这些数据是通过该链接传送的。再对该链接进行规律分析,以后对该链接发送请求。

(2)使用PhantomJS模拟浏览器行为

使用PhantomJS模拟浏览器进行发送请求,得到返回的内容是完全的(ajax加载的数据也会有)。但是使用PhantomJS请求速度过慢,一般一个网页4~5s时间,不能忍。一般要使用PhantomJS需要开多线程。

driver = webdriver.PhantomJS(executable_path='C:\PyCharm 2016.2.3\phantomjs\phantomjs.exe') # 构造网页驱动
driver.get('https://www.zhihu.com/')
print(driver.page_source) # 打印网页内容

总结

以上就是本文关于关于反爬虫的一些简单总结的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

python爬虫系列Selenium定向爬取虎扑篮球图片详解

Python爬虫实例爬取网站搞笑段子

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • Python抓取框架Scrapy爬虫入门:页面提取

    前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享出来供大家参考学习,下面随着小编来一起学习学习吧. 在开始之前,关于scrapy框架的入门大家可以参考这篇文章:http://www.jb51.net/article/87820.htm 下面创建一个爬虫项目,以图虫网为例抓取图片. 一.内容分析 打开 图虫网,顶部菜单"发现" "

  • Python3网络爬虫之使用User Agent和代理IP隐藏身份

    本文介绍了Python3网络爬虫之使用User Agent和代理IP隐藏身份,分享给大家,具体如下: 运行平台:Windows Python版本:Python3.x IDE:Sublime text3 一.为何要设置User Agent 有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份.此时,我们就可以通过设置User Agent的来达到隐藏身份的目的,User Agent的中

  • Python之Scrapy爬虫框架安装及使用详解

    题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫. 本文档将

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

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

  • Python爬虫实现爬取京东手机页面的图片(实例代码)

    实例如下所示: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib.request import urlretrieve class Picture(): def __init__(self): self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleW

  • 深入理解Python分布式爬虫原理

    首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作者,摘要,正文等信息 (3)存储到硬盘中 上面的三个过程,映射到技术层面上,其实就是:网络请求,抓取结构化数据,数据存储. 我们使用Python写一个简单的程序,实现上面的简单抓取功能. #!/usr/bin/python #-*- coding: utf-8 -*- ''''' Created on 2014-03-16 @author: Kris '

  • Python中Scrapy爬虫图片处理详解

    下载图片 下载图片有两种方式,一种是通过 Requests 模块发送 get 请求下载,另一种是使用 Scrapy 的 ImagesPipeline 图片管道类,这里主要讲后者. 安装 Scrapy 时并没有安装图像处理依赖包 Pillow,需手动安装否则运行爬虫出错. 首先在 settings.py 中设置图片的存储路径: IMAGES_STORE = 'D:/' 图片处理相关的选项还有: # 图片最小高度和宽度设置,可以过滤太小的图片 IMAGES_MIN_HEIGHT = 110 IMAG

  • Python 用Redis简单实现分布式爬虫的方法

    Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接时host为localhost即本机的ip _db = redis.Reds(host='localhost', port=6379, db=0) Slaver连接时的host也为Master的ip,端口port和数据库db不写时为默认值6379.0 _db = redis.Redis(host='

  • 关于反爬虫的一些简单总结

    爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史.而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走.然而,如果反爬机制过于严格,可能会误伤到真正的用户请求:如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本. 简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作. 1.爬取过程中的302重定向 在爬取某个网站速度过快或者发出的请求过多的时候,网站会向你所在的

  • 详解python 破解网站反爬虫的两种简单方法

    最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法. 常见的反爬虫机制有判别身份和IP限制两种,下面我们将一一来进行介绍. (一) 判别身份 首先我们看一个例子,看看到底什么时反爬虫. 我们还是以 豆瓣电影榜top250(https://movie.douban.com/top250) 为例.` import requests # 豆瓣电影榜top250的网址 url = 'https://movie.douban

  • 浅谈Scrapy框架普通反爬虫机制的应对策略

    简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作.而伪装度高的爬虫爬取速度慢,对服务器造成的负担也相对较小. 爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史.而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走.然而,如果反爬机制过于严格,可能会误伤到真正的用户请求;如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本. 简单低级的爬虫速度快,伪装度低,如果

  • Python爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防止爬虫程序爬取数据 误伤:反爬虫技术将普通用户识别为爬虫,这种情况多出现在封ip中,例如学校网络.小区网络再或者网络网络都是共享一个公共ip,这个时候如果是封ip就会导致很多正常访问的用户也无法获取到数据.所以相对来说封ip的策略不是特别好,通常都是禁止某ip一段时间访问. 成本:反爬虫也是需要人力和机器成本 拦截:成功拦截爬虫,一般拦截

  • selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

    在处理问题的之前,给大家个第一个锦囊! 你需要将chorme更新到最新版版本84,下载对应的chorme驱动 链接:http://chromedriver.storage.googleapis.com/index.html 注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~~~~ 问题 1.一周前我的滑块验证代码还是可以OK的,完全没问题!附代码 low一眼 url = "https://login.taobao.com/member/login.jhtml&quo

  • python 常见的反爬虫策略

    1.判断请求头来进行反爬 这是很早期的网站进行的反爬方式 User-Agent 用户代理 referer 请求来自哪里 cookie 也可以用来做访问凭证 解决办法:请求头里面添加对应的参数(复制浏览器里面的数据) 2.根据用户行为来进行反爬 请求频率过高,服务器设置规定时间之内的请求阈值 解决办法:降低请求频率或者使用代理(IP代理) 网页中设置一些陷阱(正常用户访问不到但是爬虫可以访问到) 解决办法:分析网页,避开这些特殊陷阱 请求间隔太短,返回相同的数据 解决办法:增加请求间隔 3.js加

  • cookies应对python反爬虫知识点详解

    在保持合理的数据采集上,使用python爬虫也并不是一件坏事情,因为在信息的交流上加快了流通的频率.今天小编为大家带来了一个稍微复杂一点的应对反爬虫的方法,那就是我们自己构造cookies.在开始正式的构造之前,我们先进行简单的分析如果不构造cookies爬虫时会出现的一些情况,相信这样更能体会出cookies的作用. 网站需要cookies才能正常返回,但是该网站的cookies过期很快,我总不能用浏览器开发者工具获取cookies,然后让程序跑一会儿,每隔几分钟再手动获取cookies,再让

  • python反爬虫方法的优缺点分析

    我们选择一种问题的解决办法,通常需要考虑到想要达到的效果,还有最重要的是这个办法本身的优缺点有哪些,与其他的方法对比哪一个更好.之前小编之前也教过大家在python应对反爬虫的方法,那么小伙伴们知道具体情况下选择哪一种办法更适合吗?今天就其中的user-agent和ip代码两个办法进行优缺点分析比较,让大家可以明确不同办法的区别从而进行选择. 方法一: 可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用. 缺点: 容易伪造头部,gi

  • 用sleep间隔进行python反爬虫的实例讲解

    在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到.有些小伙伴会提出可以保存网页链接,但这种基本的做法并不能在网页打不开后还能看到内容.我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用sleep间隔进行python反爬虫,这样就可以得到我们想到的数据啦. 步骤 要利用headers拉动请求,模拟成浏览器去访问网站,跳过最简单的反爬虫机制. 获取网页内容,保存在一个字符串content中. 构造正则表达式,

  • springboot反爬虫组件kk-anti-reptile的使用方法

      大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!   今天小编推荐一款反爬虫组件叫kk-anti-reptile,一款可快速接入的反爬虫.接口防盗刷spring boot stater组件. 1. 系统要求 基于spring-boot开发(spring-boot1.x, spring-boot2.x均可) 需要使用redis 2. 工作流程   kk-anti-reptile

随机推荐