淘宝作为全球最大的电子商务交易平台,其反爬虫措施无疑是业内最为严格,对于有大量数据需求的用户和爬虫来说,愈发棘手。本文将主要从爬虫的封禁机制、UA识别、cookies代理以及数据抓取四个方面来阐述Python如何攻克淘宝反爬虫。
一、封禁机制
淘宝通过检测爬虫的IP、访问频率、数据量等方式来判断是否是爬虫并对其进行封禁。因此对于爬虫程序来说,需要设置代理和限制访问频率。
import requests
import time
def get_page(url):
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',
}
# 使用代理,每10秒请求一次
proxies = {...}
while True:
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
if response.status_code == 200:
break
except:
pass
time.sleep(10)
return response.text
二、UA识别
淘宝还会根据UA信息来判断是否是爬虫,因此需要通过UA伪装来保护自己。可以通过使用UA池来随机获取User-Agent信息。
import random
UAPOOL=[
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.635',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3']
headers = {
'User-Agent': random.choice(UAPOOL),
}
三、Cookies代理
淘宝还会通过Cookies来判断是否是爬虫,可以使用cookies代理来伪装,需要注意的是cookies代理需要与上述的IP代理搭配使用。
import requests
def get_cookies(url):
# 设置代理
proxies = {...}
response = requests.get(url, proxies=proxies)
return response.cookies.get_dict()
cookies = get_cookies('https://www.taobao.com')
print(cookies)
四、数据抓取
对于数据的抓取,淘宝使用了JS渲染页面,因此需要使用selenium、phantomjs等工具进行抓取。
from selenium import webdriver
# 使用phantomjs进行抓取
driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
driver.get('https://www.taobao.com')
print(driver.page_source)
driver.quit()
通过上述几个方面的整合,就可以较为完整地攻克淘宝反爬虫了。