精华内容
下载资源
问答
  • 反反爬虫机制浅析

    2019-10-17 19:17:17
    https://www.jianshu.com/p/8dd187672957

    https://www.jianshu.com/p/8dd187672957

    展开全文
  • 1. 基本介绍: config.py:配置信息文件 generate_task2db.py:从12306网站上下载train_list和station_name...train_crawler.py: 车次时刻表信息抓取爬虫。 path_stations_crawler.py: 经停靠站台信息抓取爬虫。 get_pa
  • 本人是python新手,目前在看中国大学MOOC的嵩天老师的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息 以下是代码: import requests import re def getHTMLText(url): try: r = requests.get(url, timeout=30)...

    淘宝反爬虫怎么办?
    python爬虫
    欢迎点赞
    不用私信关于python了,从入门到放弃哈哈

    因为评论有很多人说爬取不到,我强调几点

    1. kv的格式应该是这样的:
      kv = {‘cookie’:‘你复制的一长串cookie’,‘user-agent’:‘Mozilla/5.0’}
      注意都应该用 ‘’ ,然后还有个英文的 逗号,
    2. kv写完要在后面的代码中添加
      r = requests.get(url, headers=kv,timeout=30)

    自己得先登录自己的淘宝账号才有自己登陆的cookie呀,没登录cookie当然没用

    以下原博

    本人是python新手,目前在看中国大学MOOC的嵩天老师的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息

    以下是代码:

    import requests
    import re
     
    def getHTMLText(url):
        try:
            r = requests.get(url, timeout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
         
    def parsePage(ilt, html):
        try:
            plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
            tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
            for i in range(len(plt)):
                price = eval(plt[i].split(':')[1])
                title = eval(tlt[i].split(':')[1])
                ilt.append([price , title])
        except:
            print("")
     
    def printGoodsList(ilt):
        tplt = "{:4}\t{:8}\t{:16}"
        print(tplt.format("序号", "价格", "商品名称"))
        count = 0
        for g in ilt:
            count = count + 1
            print(tplt.format(count, g[0], g[1]))
             
    def main():
        goods = '书包'
        depth = 3
        start_url = 'https://s.taobao.com/search?q=' + goods
        infoList = []
        for i in range(depth):
            try:
                url = start_url + '&s=' + str(44*i)
                html = getHTMLText(url)
                parsePage(infoList, html)
            except:
                continue
        printGoodsList(infoList)
         
    main()
    

    但是我们运行的时候会发现这个程序没有出错,但是爬取不到,原因是淘宝实施了反爬虫机制,r.text 时是登录界面,我们如何绕过登录界面进行爬取呢?

    首先我们需要先在浏览器中登录我们的个人淘宝,然后搜索以书包为例的商品,打开开发者模式(我使用的是chrome)或者按F12
    在这里插入图片描述
    这里我们可以看到我们当前的cookie和user-agent(一般是Mozilla/5.0)(注意:如果没有出现这几个name,点击浏览器刷新就会出现了)
    然后在代码中增加我们的cookie和user-agent
    在这里插入图片描述
    然后运行
    在这里插入图片描述

    我只是个初学者,学的时候视频给不了答案,百度了很多,才发现这个小技巧,
    有问题百度就完事了

    完整代码

    import requests
    import re
    
    
    def getHTMLText(url):
        kv = {'cookie':'t=5c749e8d453e7e3664735746f5eb5de8; cna=BrXNFDenbXUCAXggNKX9H1bo; thw=cn; tg=0; enc=5LMRHD8305w3oo8X0agYVFUDa7Ox%2F4RBf34oCWap48nRHy%2B%2B1RZCWZJ7ebn%2Fpy7vRNIL8xpS%2Ba0oNFXG5nSu8w%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; cookie2=10dbf1309bd9a2d5bc9cabe562965aee; _tb_token_=ee67e1a3ee0e5; alitrackid=www.taobao.com; swfstore=308730; v=0; unb=2448224718; sg=%E6%BB%A18d; _l_g_=Ug%3D%3D; skt=d53506c42f2db259; cookie1=BxUHGXuG%2B5Y4Iw7vZCvjLJ0zDvFL2Xy3mjxT%2FRPtFeA%3D; csg=4246b77f; uc3=vt3=F8dByEzfiHo1%2FUIk8VY%3D&id2=UUwU0bQkq1tYDQ%3D%3D&nk2=CN5OZuI3Xv2%2BlbVX&lg2=W5iHLLyFOGW7aA%3D%3D; existShop=MTU1MDU2MTUyMQ%3D%3D; tracknick=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; lgc=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; _cc_=VFC%2FuZ9ajQ%3D%3D; dnk=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; _nk_=king%5Cu4E36%5Cu5C0F%5Cu4E30%5Cu6EE1; cookie17=UUwU0bQkq1tYDQ%3D%3D; lastalitrackid=login.taobao.com; mt=ci=5_1; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; uc1=cookie14=UoTZ5OXqJxXKdA%3D%3D&lng=zh_CN&cookie16=W5iHLLyFPlMGbLDwA%2BdvAGZqLg%3D%3D&existShop=false&cookie21=UIHiLt3xThH8t7YQouiW&tag=8&cookie15=UIHiLt3xD8xYTw%3D%3D&pas=0; JSESSIONID=F99B5E66516B99D5E7C9F431E402713F; l=bBNU0zKPvJ9oGfuLBOCNZuI8LN_OGIRYjuPRwCfMi_5B46JhzLQOllv3_FJ6Vj5RsK8B4z6vzNp9-etki; isg=BDg4VI5GkPAaMvx83RJGSPCNCeYKCZ0m9uCVOHKp6XNmjdh3GrU6uo2vQcWY5lQD; whl=-1%260%260%261550562673185',
              'user-agent':'Mozilla/5.0'}
        try:
            r = requests.get(url, headers=kv,timeout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
    
    
    def parsePage(ilt, html):
        try:
            plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
            tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
            for i in range(len(plt)):
                price = eval(plt[i].split(':')[1])
                title = eval(tlt[i].split(':')[1])
                ilt.append([price, title])
        except:
            print("")
    
    
    def printGoodsList(ilt):
        tplt = "{:4}\t{:8}\t{:16}"
        print(tplt.format("序号", "价格", "商品名称"))
        count = 0
        for g in ilt:
            count = count + 1
            print(tplt.format(count, g[0], g[1]))
    
    
    def main():
        goods = '书包'
        depth = 3
        start_url = 'https://s.taobao.com/search?q=' + goods
        infoList = []
        for i in range(depth):
            try:
                url = start_url + '&s=' + str(44 * i)
                html = getHTMLText(url)
                parsePage(infoList, html)
            except:
                continue
        printGoodsList(infoList)
    
    
    main()
    

    python爬虫

    淘宝反爬虫怎么办

    展开全文
  • 1. 通常防止爬虫主要有以下几个策略 (1)动态设置User-Agent(随机切换User-Agent,模拟不同的浏览器) 方法1: 修改setting.py中的User-Agent # Crawl responsibly by identifying yourself (and your ...

    1. 通常防止爬虫被反主要有以下几个策略

    (1)动态设置User-Agent(随机切换User-Agent,模拟不同的浏览器)

    方法1: 修改setting.py中的User-Agent

    # Crawl responsibly by identifying yourself (and your website) on the user-agent
    USER_AGENT = 'Hello World'  #User-Agent

    方法2: 修改setting中的 DEFAULT_REQUEST_HEADERS

    # Override the default request headers:
     DEFAULT_REQUEST_HEADERS = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
        'User-Agent':'Hello World'
     }

    方法3 : 在代码中修改

    class HeadervalidationSpider(scrapy.Spider):
        name = 'headervalidation'
        allowed_domains = ['helloacm.com']
    
        def start_requests(self):
            header={'User-Agent':'Hello World'}
            yield scrapy.Request(url='http://helloacm.com/api/user-agent/',headers=header,callback=self.parse)
    
        def parse(self, response):
            print ('*'*20)
            print response.body
    (2)禁用Cookies

    就是不启用cookies middleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为

    1. 可以通过settings.py中的COOKIES_ENABLED , 控制 CookiesMiddleware 开启或关闭

    2. 设置延迟下载(防止访问过于频繁,设置为 2秒 或更高)DOWNLOAD_DELAY

    3. Google Cache 和 Baidu Cache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。

    4. 使用IP地址池:VPN和代理IP,现在大部分网站都是根据IP来ban的

    5. 使用Crawlera(专用于爬虫的代理组件),正确配置和设置下载中间件后,项目所有的request都是通过crawlera发出。在settings中打开下载中间件

      DOWNLOADER_MIDDLEWARES = {
           'scrapy_crawlera.CrawleraMiddleware': 600
      }
      CRAWLERA_ENABLED = True
      CRAWLERA_USER = '注册/购买的UserKey'
      CRAWLERA_PASS = '注册/购买的Password'

    2.设置下载中间件(Downloader Middlewares)

    下载中间件是处于引擎(crawler.engine)和下载器(crawler.engine.download())之间的一层组件,可以有多个下载中间件被加载运行。

    1. 当引擎传递请求给下载器过程中,下载中间件可以对请求进行处理 (增加http header信息 proxy信息等);
    2. 在下载器完成http请求,传递响应给引擎过程中,下载中间件可以对响应进行处理(例如进行gzip的解压等)

    要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。

    #开放下载中间件
    DOWNLOADER_MIDDLEWARES = {
        'mySpider.middlewares.MyDownloaderMiddleware': 543,
    }

    一般下载中间件可以定义一下一个或多个方法:

    process_request(self, request, spider)
    • 当每个request通过下载中间件时,该方法被调用。
    • process_request() 返回其中之一:None 、 Response 对象、 Request 对象或 raise IgnoreRequest:
      • 如果其返回 None ,Scrapy将继续处理该request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用, 该request被执行(其response被下载)。
      • 如果返回 Response 对象,Scrapy将不会调用 任何 其他的 process_request() 或 process_exception() 方法。 已安装的中间件的 process_response() 方法则会在每个response返回时被调用。
      • 如果其返回 Request 对象,Scrapy则停止调用 process_request方法并重新调度返回的request。当新返回的request被执行后, 相应地中间件链将会根据下载的response被调用。
      • 如果其raise一个 IgnoreRequest 异常,则安装的下载中间件的 process_exception() 方法会被调用。如果没有任何一个方法处理该异常, 则request的errback(Request.errback)方法会被调用。如果没有代码处理抛出的异常, 则该异常被忽略且不记录(不同于其他异常那样)。
    • 参数:
      • request (Request 对象) – 处理的request
      • spider (Spider 对象) – 该request对应的spider

    process_response(self, request, response, spider)

    当下载器完成http请求,传递响应给引擎的时候调用

    • process_response() 必须返回以下其中之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常。
      • 如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。
      • 如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。
      • 如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。
    • 参数:
      • request (Request 对象) – response所对应的request
      • response (Response 对象) – 被处理的response
      • spider (Spider 对象) – response所对应的spider

    3 案例

    1. 创建middlewares.py文件

      Scrapy代理IP、Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控制,我们在settings.py同级目录下创建middlewares.py文件,包装所有请求。

    # middlewares.py
    
    import random
    from settings import USER_AGENTS
    from settings import PROXIES
    
    # 随机的User-Agent
    class RandomUserAgent(object):
        def process_request(self, request, spider):
            useragent = random.choice(USER_AGENTS)
            request.headers.setdefault("User-Agent", useragent)
    
    # 随机代理IP
    class RandomProxy(object):
        def process_request(self, request, spider):
            proxy = random.choice(PROXIES)
            request.meta['proxy'] = "http://" + proxy['ip_port']
    1. 修改settings.py配置USER_AGENTS和PROXIES

    添加USER_AGENTS

    USER_AGENTS = [
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"]

    添加代理IP设置PROXIES:

    PROXIES = [
        {'ip_port': '111.8.60.9:8123'},
        {'ip_port': '101.71.27.120:80'},
        {'ip_port': '122.96.59.104:80'},
        {'ip_port': '122.224.249.122:8088'},
    ]

    除非特殊需要,禁用cookies,防止某些网站根据Cookie来封锁爬虫。

    COOKIES_ENABLED = False

    设置延迟

    DOWNLOAD_DELAY = 3

    最后设置setting.py里的DOWNLOADER_MIDDLEWARES,添加自己编写的下载中间件类

    DOWNLOADER_MIDDLEWARES = {
        #'mySpider.middlewares.MyCustomDownloaderMiddleware': 543,
        'mySpider.middlewares.RandomUserAgent': 81,
        'mySpider.middlewares.ProxyMiddleware': 100
    }
    展开全文
  • 反反爬虫相关机制

    千次阅读 2017-11-14 11:17:00
    通常防止爬虫主要有以下几个策略: 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息) 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网站通过...

    https://www.cnblogs.com/wzjbg/p/6507581.html

    Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consider contacting commercial support if in doubt. (有些些网站使用特定的不同程度的复杂性规则防止爬虫访问,绕过这些规则是困难和复杂的,有时可能需要特殊的基础设施。如果有疑问请联系商业支持。)

    来自于Scrapy官方文档描述:http://doc.scrapy.org/en/master/topics/practices.html#avoiding-getting-banned

    通常防止爬虫被反主要有以下几个策略:

    • 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)

    • 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为)

      • 可以通过COOKIES_ENABLED 控制 CookiesMiddleware 开启或关闭
    • 设置延迟下载(防止访问过于频繁,设置为 2秒 或更高)

    • Google Cache 和 Baidu Cache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。

    • 使用IP地址池:VPN和代理IP,现在大部分网站都是根据IP来ban的。

    • 使用 Crawlera(专用于爬虫的代理组件),正确配置和设置下载中间件后,项目所有的request都是通过crawlera发出。

    DOWNLOADER_MIDDLEWARES = {
        'scrapy_crawlera.CrawleraMiddleware': 600
    }
    
    CRAWLERA_ENABLED = True
    CRAWLERA_USER = '注册/购买的UserKey'
    CRAWLERA_PASS = '注册/购买的Password'
    

    如何设置下载中间件(Downloader Middlewares)

    下载中间件是处于引擎(crawler.engine)和下载器(crawler.engine.download())之间的一层组件,可以有多个下载中间件被加载运行。

    1. 当引擎传递请求给下载器的过程中,下载中间件可以对请求进行处理 (例如增加http header信息,增加proxy信息等);

    2. 在下载器完成http请求,传递响应给引擎的过程中, 下载中间件可以对响应进行处理(例如进行gzip的解压等)

    要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。

    这里是一个例子:

    DOWNLOADER_MIDDLEWARES = {
        'mySpider.middlewares.MyDownloaderMiddleware': 543,
    }
    

    编写下载器中间件十分简单。每个中间件组件是一个定义了以下一个或多个方法的Python类:

    class scrapy.contrib.downloadermiddleware.DownloaderMiddleware
    

    process_request(request, spider)

    • 当每个request通过下载中间件时,该方法被调用。

    • process_request() 必须返回以下其中之一:一个 None 、一个 Response 对象、一个 Request 对象或 raise IgnoreRequest:

      • 如果其返回 None ,Scrapy将继续处理该request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用, 该request被执行(其response被下载)。

      • 如果其返回 Response 对象,Scrapy将不会调用 任何 其他的 process_request() 或 process_exception() 方法,或相应地下载函数; 其将返回该response。 已安装的中间件的 process_response() 方法则会在每个response返回时被调用。

      • 如果其返回 Request 对象,Scrapy则停止调用 process_request方法并重新调度返回的request。当新返回的request被执行后, 相应地中间件链将会根据下载的response被调用。

      • 如果其raise一个 IgnoreRequest 异常,则安装的下载中间件的 process_exception() 方法会被调用。如果没有任何一个方法处理该异常, 则request的errback(Request.errback)方法会被调用。如果没有代码处理抛出的异常, 则该异常被忽略且不记录(不同于其他异常那样)。

    • 参数:

      • request (Request 对象) – 处理的request
      • spider (Spider 对象) – 该request对应的spider

    process_response(request, response, spider)

    当下载器完成http请求,传递响应给引擎的时候调用

    • process_request() 必须返回以下其中之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常。

      • 如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。

      • 如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。

      • 如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。

    • 参数:

      • request (Request 对象) – response所对应的request
      • response (Response 对象) – 被处理的response
      • spider (Spider 对象) – response所对应的spider

    使用案例:

    1. 创建middlewares.py文件。

    Scrapy代理IP、Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控制,我们在settings.py同级目录下创建middlewares.py文件,包装所有请求。

    # middlewares.py
    
    import random
    import base64
    # 导入settings的PROXIES设置
    from settings import PROXIES # 随机使用预定义列表里的 User-Agent类 class RandomUserAgent(object): def __init__(self, agents): # 使用初始化的agents列表 self.agents = agents  @classmethod def from_crawler(cls, crawler): # 获取settings的USER_AGENT列表并返回 return cls(crawler.settings.getlist('USER_AGENTS')) def process_request(self, request, spider): # 随机设置Request报头header的User-Agent request.headers.setdefault('User-Agent', random.choice(self.agents)) # 随机使用预定义列表里的 Proxy代理 class ProxyMiddleware(object): def process_request(self, request, spider): # 随机获取from settings import PROXIES里的代理 proxy = random.choice(PROXIES) # 如果代理可用,则使用代理 if proxy['user_pass'] is not None: request.meta['proxy'] = "http://%s" % proxy['ip_port'] # 对代理数据进行base64编码 encoded_user_pass = base64.encodestring(proxy['user_pass']) # 添加到HTTP代理格式里 request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass else: print "****代理失效****" + proxy['ip_port'] request.meta['proxy'] = "http://%s" % proxy['ip_port'] 

    为什么HTTP代理要使用base64编码:

    HTTP代理的原理很简单,就是通过HTTP协议与代理服务器建立连接,协议信令中包含要连接到的远程主机的IP和端口号,如果有需要身份验证的话还需要加上授权信息,服务器收到信令后首先进行身份验证,通过后便与远程主机建立连接,连接成功之后会返回给客户端200,表示验证通过,就这么简单,下面是具体的信令格式:

    CONNECT 59.64.128.198:21 HTTP/1.1
    Host: 59.64.128.198:21
    Proxy-Authorization: Basic bGV2I1TU5OTIz
    User-Agent: OpenFetion
    

    其中Proxy-Authorization是身份验证信息,Basic后面的字符串是用户名和密码组合后进行base64编码的结果,也就是对username:password进行base64编码。

    HTTP/1.0 200 Connection established
    

    OK,客户端收到收面的信令后表示成功建立连接,接下来要发送给远程主机的数据就可以发送给代理服务器了,代理服务器建立连接后会在根据IP地址和端口号对应的连接放入缓存,收到信令后再根据IP地址和端口号从缓存中找到对应的连接,将数据通过该连接转发出去。

    2. 修改settings.py配置USER_AGENTS和PROXIES

    • 添加USER_AGENTS:
      USER_AGENTS = [
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0", "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5" ] 
    • 添加代理IP设置PROXIES:

      代理IP可以网上搜索,或者付费购买一批可用代理IP:

    PROXIES = [
        {'ip_port': '111.8.60.9:8123', 'user_pass': ''},
        {'ip_port': '101.71.27.120:80', 'user_pass': ''}, {'ip_port': '122.96.59.104:80', 'user_pass': ''}, {'ip_port': '122.224.249.122:8088', 'user_pass': ''}, ] 
    • 禁用cookies,防止某些网站根据Cookie来封锁爬虫。
    COOKIES_ENABLED = False
    
    • 设置下载延迟
    DOWNLOAD_DELAY = 3
    
    • 最后设置setting.py里的DOWNLOADER_MIDDLEWARES
    DOWNLOADER_MIDDLEWARES = {
        #'mySpider.middlewares.MyCustomDownloaderMiddleware': 543,
        'mySpider.middlewares.RandomUserAgent': 1,
        'mySpider.middlewares.ProxyMiddleware': 100 }



    阿布云代理设置
    https://www.abuyun.com/http-proxy/pro-manual-python.html

    scrapy 设置ip代理

    https://my.oschina.net/jhao104/blog/639745

     

    展开全文
  • SinaSpider, 动态IP解决新浪的反爬虫机制,快速抓取内容。
  • 主要介绍了浅谈Scrapy框架普通反爬虫机制的应对策略,具有一定借鉴价值,需要的朋友可以参考下
  • 爬虫原理及反爬虫机制以及反爬虫方法的应对策略

    千次阅读 多人点赞 2019-04-27 23:00:04
    爬虫原理及反爬虫机制关于爬虫爬虫原理反爬虫机制1.检验数据头User-Agent反爬虫机制解析:2.访问频率限制或检验3.蜜罐技术反爬虫机制的应对方法1.设定Request Headers中的User-Agent2.设定随机访问频率3.代理IP或者...
  • 主要介绍了Python常见反爬虫机制解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了python爬虫 urllib模块反爬虫机制UA详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 现如今,很多网站为了防止网站信息流失,都会制定一些反爬虫机制,那么对于爬虫工作者来说应该怎么解决这个问题呢?下面就给大家详细介绍下相关解决办法。 一般来说,真实用户在正常访问浏览网站会很慢,但是如果一...
  • 之前爬美团外卖后台的时候出现的问题,各种方式拖动验证码都无法成功,包括直接控制拉动,模拟人工轨迹的随机拖动都失败了,最后发现只要用chrome driver打开页面,哪怕手动登录也不可以,猜测driver肯定是直接被...
  • 常见反爬虫机制

    千次阅读 2019-06-27 17:28:23
    在采集网站的时会遇到一些比数据显示在浏览器上却抓取不出来更令人沮丧的事情。也许是向服务器提交自认为已经处理得很好的表单却被拒绝,也许是...最有可能出现的情况是:对方有意不让爬虫抓取信息。网站已经把你...
  • 主要介绍了Python3爬虫学习之应对网站反爬虫机制的方法,结合实例形式分析了Python3模拟浏览器运行来应对反爬虫机制的相关操作技巧,需要的朋友可以参考下
  • 淘宝、京东反反爬虫爬取手机信息 应对反爬的方式:使用 selenium 模拟浏览器方式爬取,先通过以某个端口打 开 chrome 浏览器,手动登录淘宝,防止留下 selenium 指纹被淘宝封号: 再通过 9399 端口将浏览器控制...
  • 主要介绍了python破解网易反爬虫机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 爬虫,反爬虫和反反爬虫

    千次阅读 2018-11-02 16:22:01
    随之大数据的火热,网络上各种网页抓取/爬虫工具蜂拥而来,因而,网页数据成了大家竞争掠夺的资源,但网站运营者却要开始保护...下面总结一下反爬虫策略及其应对方法。 一、什么是爬虫和反爬虫 一张图说明一切:...
  • 爬虫和反爬虫机制

    2020-09-22 11:11:03
    反爬虫机制: 一。基于数据加密的反爬 1.通过Css来反爬虫 原理:源代码数据不为真的数据,需要通过css位移 2.通过js动态生成数据进行反爬 思路:解析关键js,获取数据生成流程,模拟生成数据 3.数据图片化 二。基于...
  • 反爬虫—— 使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量 最简单的是你爬网站获取不到正确的信息 案例 爬取拉勾网python职位的薪资等 我们可以看到一般代码并不能获取到需要的...
  • 网络爬虫怎么应对反爬虫机制

    千次阅读 2019-05-28 16:54:33
    很多网络爬虫在工作的时候发现,很多网站都有反爬虫机制,但很多人的工作就是要完成爬虫数据,那么,网络爬虫怎么应对反爬虫机制呢?一般反爬虫机制都是通过设置访问频率及访问的IP,如果抓取的频率过高,或者一直...
  • 轻松绕过90%反爬虫机制

    千次阅读 2020-02-18 22:09:04
    反爬虫战争的胜利终将属于爬虫一方。 反 反爬原理 大部分网站的反爬机制都很简单,只要我们添加一定的headers、cookie信息就可以伪装通过验证,极少数网站会用到密匙加密等验证。 绕过淘宝反爬机制 1、...
  • woffxml解码猫眼网反爬虫机制的爬虫
  • 盘点一些网站的反爬虫机制

    万次阅读 2018-09-18 21:32:16
    而是网站方为了避免数据被爬取,增加了各种各样的反爬虫措施。如果想要继续从网站爬取数据就必须绕过这些措施。因此,网络爬虫的难点在于反爬的攻克和处理。那么本文主要介绍一些网站的反爬虫措施。 妹子图 这个...
  • 反爬虫机制处理

    2021-01-23 09:17:31
    常用的反爬虫机制有 浏览器的动态加载 如果爬取的网页是动态网页,数据就是ajax动态加载的,如果ajax没有参数验证的话,那么就简单了,只是从解析html变成了解析json。 如果ajax需要参数验证的话,需要一定的 JS ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,004
精华内容 4,401
关键字:

反反爬虫机制

爬虫 订阅