阻碍网络爬虫进行的原因有哪些?

回复
laical
崭露头角
崭露头角
帖子: 20
注册时间: 2020年03月26日 17:45
联系:

阻碍网络爬虫进行的原因有哪些?

帖子 laical »

HTTP网络协议与HTTPS协议是存在着差异的,这种差异也延长到了HTTP代理与HTTPS代理之中。要想了解这之中的区别,大家先来了解这两种互联网协议的各自特性。
1、HTTPS要用到SSL证书,而HTTP不用。
2、是明文传输协议,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
HTTPS比HTTP更为安全,对搜索引擎更为友好,利于SEO,谷歌、百度优先索引HTTPS网页。
3、HTTPS标准端口443,HTTP标准端口80。
4、HTTPS在浏览器显示绿色安全锁,HTTP没有显示。
5、HTTPS依托于传输层,HTTP依托于应用层。
运用于网络爬虫中,不论是HTTP代理或是HTTPS代理,都可以协助消费者完成业务。然而 有的时候,使用了IP代理,也会无可避免的碰上网络爬虫被禁。
使用代理:
适用情况:大部分网站均限制了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
检查代理使用问题:
1、检查正常浏览器提交的参数,在准备向网站提交表单或是发出post请求前,不要忘记检查一下页面内容是不是每个字段已经填好,格式是不是正确。
2、检验JavaScript,一般 表现为抓取页面信息空白,缺少信息,或是抓取到的信息与你在浏览器上看到的内容不同。
使用cookie登陆:
使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。
#! -*- encoding:utf-8 -*-
import requests
import random
import requests.adapters
# 要访问的目标页面
targetUrlList = [
"https://httpbin.org/ip",
"https://httpbin.org/headers",
"https://httpbin.org/user-agent",
]
# 代理服务器(产品官网 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,
}
# 访问三次网站,使用相同的Session(keep-alive),均能够保持相同的外网IP
s = requests.session()
# 设置cookie
cookie_dict = {"JSESSION":"123456789"}
cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
s.cookies = cookies
for i in range(3):
for url in targetUrlList:
r = s.get(url, proxies=proxies)
print r.text
若存在验证码,此时采用response = requests_session.post(url=url_login, data=data)是不行的,做法应该如下:
response_captcha = requests_session.get(url=url_login, cookies=cookies)
response1 = requests.get(url_login) # 未登陆
response2 = requests_session.get(url_login) # 已登陆,因为之前拿到了Response Cookie!
response3 = requests_session.get(url_results) # 已登陆,因为之前拿到了Response Cookie!
对于python网络爬虫,亿牛云HTTP代理的IP有得天独厚的优势,这些都有助于大家完成网络爬虫业务。
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客