精华内容
下载资源
问答
  • Python-常见的反爬虫手段
    2022-03-02 15:54:56

    Python-常见的反爬虫手段

    对于静态页面针对爬虫的手段常常为Headers验证及针对IP的用户行为分析。

    一、Headers反爬虫机制

    ​ Headers反爬虫机制常常为验证Headers中的信息,常需要验证的信息为UserAgent或X-Token等。针对UserAgent的反爬虫手段,通过导入 fake_useragent 包随机选择UserAgent的方式进行请求。

    import requests
    from fake_useragent import UserAgent
    
    base_url = 'http://icanhazip.com'
    ua = UserAgent()
    # User-Agent 采用随机选取的方式
    headers = {
        'X-Token': 'eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MTQ4NDY3MTksImp0aSI6IjVhMmMwYWMyLTAzNTYtNDQ5ZXXXXX'
        , 'Cookie': 'JSESSIONID=3555BE5F1XXXXXX'
        , 'User-Agent': ua.random
    }
    response = requests.get(base_url, headers=headers)
    
    二、针对IP进行用户行为分析的反爬虫机制

    ​ 针对单个IP的用户行为分析,需要使用切换不同代理IP间断的拉取数据,从而避免被网站屏蔽。若资源充足,还可以使用分布式爬虫。

    import requests
    
    """
    1.需要将代理IP加入数组
    2.使用 url 验证代理IP是否可用
    3.使用代理IP访问需要爬取的网站
    """
    url = 'http://icanhazip.com'
    proxies = [
        {'http': 'http://107.151.182.247:80'},
        {'http': 'http://206.253.164.101:80'}
    ]
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit'
                      '/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }
    # proxies = random.choice(proxies)
    
    for ips in proxies:
        try:
            # 设置重连次数
            requests.adapters.DEFAULT_RETRIES = 3
            res = requests.get(url, headers=headers, timeout=3, proxies=ips)
            # 查看是否为代理IP
            print(res.text)
        except:
            print("1代理IP无效!")
    

    后续更新

    更多相关内容
  • 对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。 proxies = {'http':'http://XX.XX.XX.XX:XXXX'} Requests: import requests response = requests.get(url=url, proxies=...
  • 使用代理适用情况:大部分网站均限制了IP的访问量对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。#!-*-encoding:utf-8-*-importrequestsimportrandom#要访问的目标页面targetUrl=...

    使用代理

    适用情况:大部分网站均限制了IP的访问量

    对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。

    #! -*- encoding:utf-8 -*-        import requests        import random        # 要访问的目标页面        targetUrl = "http://httpbin.org/ip"        # 要访问的目标HTTPS页面        # targetUrl = "https://httpbin.org/ip"        # 代理服务器(产品官网 www.16yun.cn)        proxyHost = "t.16yun.cn"        proxyPort = "31111"        # 代理隧道验证信息        proxyUser = "username"        proxyPass = "password"        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {            "host" : proxyHost,            "port" : proxyPort,            "user" : proxyUser,            "pass" : proxyPass,        }        # 设置 http和https访问都是用HTTP代理        proxies = {            "http"  : proxyMeta,            "https" : proxyMeta,        }        #  设置IP切换头        tunnel = random.randint(1,10000)        headers = {"Proxy-Tunnel": str(tunnel)}        resp = requests.get(targetUrl, proxies=proxies, headers=headers)        print resp.status_code        print resp.text

    时间设置

    适用情况:限制频率情况。大部分网站有频率限制,比如搜索后需要一定间隔才能获取详情页面等。

    我们可以用sleep方式来做出以下延迟。

    import timetime.sleep(1)

    伪装成浏览器,或者反“反盗链”

    有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。

    User-Agent可以用亿牛云提供给的真实库,Referer的来源可以伪装成百度搜索来的。

    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36', 'Referer':'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=nike'}response = requests.get(url=url, headers=headers)

    20-06-19 17:38

    235

    0

    展开全文
  • 主要介绍了python爬虫 urllib模块反爬虫机制UA详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法。分享给大家供大家参考,具体如下: 如何应对网站的反爬虫机制 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来...
  • python破解网易反爬虫机制

    千次阅读 2018-03-12 00:13:53
    python3 urllib破解有道翻译反爬虫机制 前言 最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果。发现接口变化很大,用md5加了密,于是自己开始...

    用python3 urllib破解有道翻译反爬虫机制

    前言

    最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果。发现接口变化很大,用md5加了密,于是自己开始破解。加上网上的其他文章找源码方式并不是通用的,所有重新写一篇记录下。

    爬取条件

    要实现爬取的目标,首先要知道它的地址,请求参数,请求头,响应结果。

    进行抓包分析

    打开有道翻译的链接:http://fanyi.youdao.com/。然后在按f12 点击Network项。这时候就来到了网络监听窗口,在这个页面中发送的所有网络请求,都会在Network这个地方显示出来,如果是空白的,点击XHR。接着我们在翻译的窗口输入我们需要翻译的文字,比如输入hell。然后点击自动翻译按钮,那么接下来在下面就可以看到浏览器给有道发送的请求,这里截个图看看:

    这里写图片描述

    点击链接,就可以看到整个请求的信息。包括请求头,请求参数,响应结果。
    这里面有一个问题就是参数进行了加密。我们需要知道这些参数是如何加密的。

    破解加密难题

    要想知道如何加密的,需要查看源码。于是我们需要知道发起这个请求的js文件。在文件查找这个相关代码。刚才我们监听了网络请求,可以看到发起请求的js文件。那么接下来查找发起请求的链路,鼠标浮到请求文件上,显示了一系列执行方法,我们点击跟业务相关的那个方法对应的文件链接,这里是t.translate 对应的连接。
    这里写图片描述

    点击进入查看对应的源码
    这里写图片描述

    我们可以看到i,salt,sign是变量,其他的请求参数是常量。i是需要翻译的字符串,salt是时间戳生成的13位,sign是S+n+r+D
    也就S是client的值,也就是fanyideskweb. 我们查找D 这个常量,在底栏输入框输入 D = (空格D空格=空格;格式化后的代码规范)点击右边的Aa让搜索时大小写敏感。回车查找到下一个,直到找到对应的值。
    这里写图片描述
    在上图我们看到了_,C,S,D等常量。
    于是你以为构建一个请求,传好这些参数就ok了。别忘了,为了反爬虫,都是会校验请求头。于是要模拟浏览器的请求头。经过验证只需要User-Agent,Referer,Cookie 三个请求头。

    实现代码:

    # -*- coding: utf-8 -*-
    from urllib import request,parse
    import json
    import time
    from hashlib import md5
    
    '''
    def dicToSortedStrParam(dic={}):
        keyList = sorted(dic)
        str =""
        for i,key in enumerate(keyList):
            if i==len(keyList)-1:
                str +=  key +"="+ dic[key]
            else:
                str +=  key +"="+ dic[key] + "&"
            pass
        return str
    '''
    
    
    def create_md5(data):
        md5_obj = md5()
        md5_obj.update(data.encode("utf-8"))
        return md5_obj.hexdigest()
    
    if __name__ == "__main__":
        request_url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
        translate = "hell"
        c = "fanyideskweb"
        data = {}
        data["i"] = translate
        data["from"] = "AUTO"
        data["to"] = "AUTO"
        data["smartresult"] = "dict"
        data["client"] = c
        data["doctype"] = "json"
        data["version"] = "2.1"
        data["keyfrom"] = "fanyi.web"
        data["action"] = "FY_BY_REALTIME"
        data["typoResult"] = "false"
        salt = str(int(round(time.time(),3)*1000))
        # 加密
        data["salt"] = salt
        # a = "rY0D^0'nM0}g5Mm1z%1G4"   网上别人的 也可以
        a = "ebSeFb%=XZ%T[KZ)c(sy!"
        sign = create_md5(c+translate+salt+a)
        data["sign"] = sign
        headers = {}
        headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
        # headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
        headers["Referer"] = "http://fanyi.youdao.com/"
        # headers["Host"] = "fanyi.youdao.com"
        # headers["Origin"]="http://fanyi.youdao.com"
        headers["Cookie"]="OUTFOX_SEARCH_USER_ID=-948455480@10.169.0.83; " \
                          "JSESSIONID=aaajvZPcjhFWbgtIBPuiw; " \
                          "OUTFOX_SEARCH_USER_ID_NCOO=1148682548.6241577;" \
                          " fanyi-ad-id=41685; fanyi-ad-closed=1; ___rl__test__cookies="+salt
    
        data = parse.urlencode(data).encode('utf-8')
        request1 = request.Request(request_url,data,headers = headers)
    
        response = request.urlopen(request1)
        print(response.info())
        #读取信息并解码
        html = response.read().decode('utf-8')
        print(html)
        #使用JSON
        translate_results = json.loads(html)
        # 找到翻译结果
        translate_results = translate_results['translateResult'][0][0]['tgt']
        # 打印翻译信息
        print("翻译的结果是:%s" % translate_results)

    翻译结果:

    {"translateResult":[[{"tgt":"地狱","src":"hell"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. 地狱;究竟(作加强语气词);训斥;黑暗势力\r\n","vi. 过放荡生活;飞驰\r\n","int. 该死;见鬼(表示惊奇、烦恼、厌恶、恼怒、失望等)\r\n"],"type":1}}
    翻译的结果是:地狱
    展开全文
  • 因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。网络爬虫的难点其实并不...妹子图这个网站的反爬虫机制比较简单。...

    因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。

    网络爬虫的难点其实并不在于爬虫本身。而是网站方为了避免数据被爬取,增加了各种各样的反爬虫措施。如果想要继续从网站爬取数据就必须绕过这些措施。因此,网络爬虫的难点在于反爬的攻克和处理。那么本文主要介绍一些网站的反爬虫措施。

    妹子图

    这个网站的反爬虫机制比较简单。当我们使用网络请求库下载图片时,该网站会对检查每个 HTTP 请求的 headers 头部中 Referer 字段。它判断该字段是否为空,如果字段为空,那么不会返回正常显示的图片,而是返回一张带有“图片来自妹子网,请勿盗链”字样的图片。

    遇到这种机制,突破也是比较简单。对每个 HTTP 请求,将页面的 url 地址填充到 Referer 字段中。

    豆瓣

    几乎所有的爬虫新手都会爬取豆瓣练练手。但是豆瓣还是保持开放的态度,反爬虫机制做得还是很人性化。它的反爬虫机制大概如下:

    1、在没有携带 cookie 的情况下,如果某个 IP 短时间高并发请求网站,该 IP 会立马被封。当 IP 被封,登录豆瓣网站会解封。

    3、在携带 cookie 的情况下,某个 IP 请求网站过于频繁。豆瓣的反爬虫机制变为只封 cookie 不封 IP。也就说退出登录或者换个账号还能继续访问网站。

    面对这么体谅新手的网站,我们要下手不能那么猛。我们只要在代码中登录账号,同时降低并发数,再随机延迟等待一段时间。我们的爬虫程序就不会被封杀了。

    拉勾网

    拉勾网站刚出来的时候,反爬虫机制还没有现在这么严格。估计爬取网站的人多了起来,网站管理员为了保护服务器增加一些手段。该网站的反爬虫机制大概是这样子。

    1、在没有登录的情况下,程序只能连续访问 3 个 Url。如果再继续访问,网站会将链接重定向,然后提示我们登录。

    2、如果在登录情况下,连续请求部分 url 之后,我们的 IP 会被封。

    针对这样的爬虫机制,我们只能使用 IP 代理池来突破。

    汽车之家

    汽车之家论坛的反爬虫机制就比较高级。它利用前端页面自定义字体的方式来实现反爬的技术手段。具体使用到是 CSS3 中的自定义字体(@font-face)模块,自定义字体主要是实现将自定义的 Web 字体嵌入到指定网页中去。这就导致我们去爬取论坛帖子的口碑时,获取到的返回文本中每隔几个字就出现一个乱码符号。

    每次访问论坛页面,其中字体是不变的,但字符编码是变化的。因此,我们需要根据每次访问动态解析字体文件。

    具体可以先访问需要爬取的页面,获取字体文件的动态访问地址并下载字体,读取 js 渲染后的文本内容,替换其中的自定义字体编码为实际文本编码,就可复原网页为页面所见内容了。

    最后说句良心话,我们爬取别人网站的数据,要在不损害别人网站的情况下进行。所以建议大家不要在网站访问高峰的时候爬取数据,尽量选择在晚上进行爬取。同时设置延时操作降低并发数。

    推荐阅读:

    猴哥:想提高爬虫效率?aiohttp 了解下​zhuanlan.zhihu.com猴哥:爬虫与反爬虫的博弈​zhuanlan.zhihu.com猴哥:多线程爬取 unsplash 图库​zhuanlan.zhihu.com猴哥:爬取《Five Hundred Miles》在网易云音乐的所有评论​zhuanlan.zhihu.com猴哥:学会运用爬虫框架 Scrapy (三)​zhuanlan.zhihu.com猴哥:爬取网易云音乐精彩评论​zhuanlan.zhihu.com猴哥:学会运用爬虫框架 Scrapy (二)-爬取 V电影​zhuanlan.zhihu.com猴哥:我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?​zhuanlan.zhihu.com猴哥:爬虫实战一:爬取当当网所有 Python 书籍​zhuanlan.zhihu.com猴哥:“干将莫邪” —— Xpath 与 lxml 库​zhuanlan.zhihu.com猴哥:爬虫实战二:爬取电影天堂的最新电影​zhuanlan.zhihu.com

    本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享

    【极客猴】每周坚持分享 Python 原创干货的公众号。包括基础入门,进阶技巧,网络爬虫,数据分析, Web 应用开发等,欢迎关注。

    展开全文
  • 相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制(或者说脚本机制),最常见的脚本机制都是在登录时进行验证,据本人大量实战(帮粉丝写脚本)发现,基本上只要有点水平的网站都会有脚本的机制,...
  • 我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用sleep间隔进行python反爬虫,这样就可以得到我们想到的数据啦。 步骤 要利用headers拉动请求,模拟成浏览器去访问网站,跳过...
  • 主要介绍了python破解网易反爬虫机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python爬虫与反爬虫

    2021-09-11 19:50:28
    一、爬虫与反爬虫 1. 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。 2. 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批 量。 3. 误伤:在反爬虫的...
  • 最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法。 常见的反爬虫机制有判别身份和IP限制两种,下面我们将一一来进行介绍...
  • Python反爬机制介绍

    2022-02-25 09:14:26
    一.UA检测与UA伪装 ...则表示该请求不是正常的请求(爬虫),则会拒绝该请求 UA伪装:.让爬虫对应的请求载体身分标识伪装成某一款浏览器 写以下两行代码即可 headers={ 'User-Agent':'Mozilla/5.0 (Windows NT
  • ‍‍‍‍‍‍‍来源:编程派‍‍‍‍‍‍‍爬虫Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。这种情况下,你该如何应对...
  • 既然有IP反爬措施,那就有反爬对策,我们可以构建一个IP池,针对具有IP反爬措施的网站,每次访问时都随机取出来一个IP,这样就会很大程度上避免被服务器识别出爬虫,大大提高了爬取数据的成功率。 给大家分享两个...
  • #打开浏览器 chrome_browser=webdriver.Chrome(chrome_options=option,executable_path='F:\python\chrome驱动\chromedriver.exe') 设置完后 即可成功登录12306 #跳转到12306首页 chrome_browser.get('...
  • python中两种反爬机制

    2020-05-13 00:19:02
    request:爬虫中一个基于网络请求的模块 作用:模拟浏览器发起请求 编码流程 (1)指定URL (2)发起请求 (3)获取响应数据 (4) 持久化存储 3、什么是user-agent? 请求载体的身份标识 注:请求载...
  • 主要介绍了浅谈Scrapy框架普通反爬虫机制的应对策略,具有一定借鉴价值,需要的朋友可以参考下
  • 反爬虫机制

    2022-02-09 20:23:47
    掌握爬虫遇到的五大类情况,精准对比遇到的反爬机制
  • 一、一般服务器是通过request header中的user-agent来判断访问的是否为非人类,python给我提供的一个方法用于修改user-agent中的类容来试图欺骗服务器 使用user.request.Request(url,data=None,headers={}) 我们...
  • 天堂图片网Python3爬虫
  • ■怀疑的反爬虫策略模拟浏览器法头一次程序进去后能打开网站。但是再进时,被检测到使用ROBOTS程序后重定向至下述网址。之后能用Safari,或正常的chrome打开,没有被禁IP。结合网址的描述,怀疑该网站是通过cookie...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,084
精华内容 3,233
关键字:

python反爬虫机制