Python很强大,熟练的程序员可以在5分钟内写出一个有价值的爬虫,比如抓取旅游信息、抓取工商信息、抓取商品信息等都是有价值的数据网站。但像这样的有价值的网站是不会任由你无限爬取的,有爬取就有反抗。这是一场网站和程序员之间的一种博弈,{BANNED}最佳后能获取到多少的数据全凭你的技术能力。今天就重点来聊下这个网站之间的博弈,彼此之间的招数就是你抓他就防,你改进抓取方法,他就提高防抓手段,总之不会让人随便你抓爬取。
从爬虫技术角度讲,只要你能通过网页上看到的内容,就一定能抓!无非就是抓取难度的大小。接下来小编总结了爬虫的几个难点以及如何解决的思路。
1、如何判定网站是否能抓取,一般的能抓取的网站都会有robots.txt,这个是网站写给爬虫的声明,里面写明了那些内容不能抓取,robots.txt一般放在网站的根目录下。
2、复杂多变的网页结构,通常会有这2种表现方式。1.同一个网页在显示不同的内容时会有不同的结构。
比如商品详情页,不同的商品,使用不同的网页模板,这是很正常的情况。2.网页功能或者设计风格的改变。一般的爬虫都是根据网页结构,使用xpath去解析内容,一旦结构变了,就解析不出来了。
3、IP封锁,iP封锁是常用的反抓取手段。当网站发现某个IP地址发送请求过多的时候,会临时或者永久的封锁这个IP的请求。一般情况下直接上代理就可以,{BANNED}最佳好是选择付费代理,质量,稳定性更有保障,如果不知道如何去选择,可以直接使用这家
,联系客户先测试后购买。代理的添加方式如下所示
-
#! -*- encoding:utf-8 -*-
-
-
import requests
-
import random
-
-
# 要访问的目标页面
-
targetUrl = ""
-
-
# 要访问的目标HTTPS页面
-
# targetUrl = ""
-
-
# 代理服务器(产品官网 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.、图片验证码,图片验证码是另一种{BANNED}最佳常用的反爬技术,现在出现了各种更奇葩,难度更大的验证手段。5、登录请求,有些内容需要登录后才能访问,但如果是自己的账号,那一般是没问题的。