Python很强大,熟练的程序员可以在5分钟内写出一个有价值的爬虫,比如抓取旅游信息、抓取工商信息、抓取商品信息等都是有价值的数据网站。但像这样的有价值的网站是不会任由你无限爬取的,有爬取就有反抗。这是一场网站和程序员之间的一种博弈,最后能获取到多少的数据全凭你的技术能力。今天就重点来聊下这个网站之间的博弈,彼此之间的招数就是你抓他就防,你改进抓取方法,他就提高防抓手段,总之不会让人随便你抓爬取。

从爬虫技术角度讲,只要你能通过网页上看到的内容,就一定能抓!无非就是抓取难度的大小。接下来小编总结了爬虫的几个难点以及如何解决的思路。

1、如何判定网站是否能抓取,一般的能抓取的网站都会有robots.txt,这个是网站写给爬虫的声明,里面写明了那些内容不能抓取,robots.txt一般放在网站的根目录下。

2、复杂多变的网页结构,通常会有这2种表现方式。1.同一个网页在显示不同的内容时会有不同的结构。

比如商品详情页,不同的商品,使用不同的网页模板,这是很正常的情况。2.网页功能或者设计风格的改变。一般的爬虫都是根据网页结构,使用xpath去解析内容,一旦结构变了,就解析不出来了。

3、IP封锁,iP封锁是常用的反抓取手段。当网站发现某个IP地址发送请求过多的时候,会临时或者永久的封锁这个IP的请求。一般情况下直接上代理就可以,最好是选择付费代理,质量,稳定性更有保障,如果不知道如何去选择,可以直接使用这家http://www.16yun.cn/help/,联系客户先测试后购买。代理的添加方式如下所示:

#! -*- 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

 

4.、图片验证码,图片验证码是另一种最常用的反爬技术,现在出

posted on 2023-02-09 16:37  小橙子11  阅读(159)  评论(0编辑  收藏  举报