爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧,并提供对应的代码案例。
User-Agent是HTTP请求头的一部分,其中包含了浏览器、手机等使用的应用程序的信息。在爬虫中,使用默认的User-Agent,或者使用爬虫常用的User-Agent,容易被服务器识别为机器人,因此我们需要伪装User-Agent。使用Python中的requests库可以方便地添加User-Agent头。
import requests
# 设置User-Agent头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 请求URL
url = 'https://www.example.com'
# 发送请求
response = requests.get(url, headers=headers)
# 输出响应内容
print(response.text)
单个IP频繁访问服务器容易被封禁,因此我们可以使用IP代理来访问网站。IP代理有免费和付费的,这里我们使用免费的IP代理。使用Python中的requests库可以方便地设置代理服务器。
import requests
# 设置代理服务器
proxies = {
'http': 'http://127.0.0.1:1080',
'https': 'https://127.0.0.1:1080'
}
# 请求URL
url = 'https://www.example.com'
# 发送请求
response = requests.get(url, proxies=proxies)
# 输出响应内容
print(response.text)
频繁访问服务器容易被识别为机器人,因此我们需要模拟人类访问网站的行为,随机设置访问时间间隔。使用Python中的time库可以方便地设置访问时间间隔。
import requests
import time
import random
# 设置User-Agent头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 请求URL
url = 'https://www.example.com'
# 随机访问时间间隔
time.sleep(random.randint(0, 3))
# 发送请求
response = requests.get(url, headers=headers)
# 输出响应内容
print(response.text)
有些网站需要登录才能访问,我们需要在访问网站时携带cookie,以模拟登录状态。使用Python中的requests库可以方便地设置cookie。
import requests
# 设置User-Agent头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 设置cookie
cookies = {
'sessionid': 'xxxx'
}
# 请求URL
url = 'https://www.example.com'
# 发送请求
response = requests.get(url, headers=headers, cookies=cookies)
# 输出响应内容
print(response.text)
有些网站需要进行验证码识别,我们可以使用OCR等技术进行识别。这里我们使用Python中的Tesseract-OCR库对验证码进行识别。
import requests
import pytesseract
from PIL import Image
# 设置User-Agent头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 请求验证码图片
url = 'https://www.example.com/captcha.png'
response = requests.get(url, headers=headers)
# 保存验证码图片
with open('captcha.png', 'wb') as f:
f.write(response.content)
# 对验证码图片进行识别
captcha_image = Image.open('captcha.png')
captcha_text = pytesseract.image_to_string(captcha_image)
# 输出验证码文本
print(captcha_text)
有些网站会在前端使用JS异步加载数据,此时需要使用Selenium等工具对页面进行动态解析。这里我们使用Python中的Selenium库来模拟浏览器访问网站。
from selenium import webdriver
# 设置User-Agent头
options = webdriver.ChromeOptions()
options.add_argument(
'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
# 请求URL
url = 'https://www.example.com'
# 使用Selenium打开网页
driver = webdriver.Chrome(options=options)
driver.get(url)
# 执行JS代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 获取响应内容
response = driver.page_source
# 输出响应内容
print(response)
# 关闭浏览器
driver.quit()
如果一个账号频繁访问被封禁,我们可以使用多个账号轮流访问网站。这里我们使用Python中的random库来随机选择账号。
import requests
import random
# 用户列表
users = [
{'username': 'user1', 'password': 'password1'},
{'username': 'user2', 'password': 'password2'},
{'username': 'user3', 'password': 'password3'}
]
# 随机选择一个账号
user = random.choice(users)
# 构造登录信息
data = {
'username': user['username'],
'password': user['password']
}
# 请求登录URL
login_url = 'https://www.example.com/login'
response = requests.post(login_url, data=data)
# 输出响应内容
print(response.text)
总的来说,伪装的目的是让爬虫看起来更像人类行为,反“反爬”的目的是应对复杂的反爬虫机制。在实际爬虫项目中,需要根据具体情况选择合适的伪装和反“反爬”技巧。