说到Python网络爬虫,很多人都会遇到困难。最常见的就是爬取过程中IP地址被屏蔽。虽然大部分都是几个小时内自动解封的,但这对于分秒必争的python网络爬虫来说,是一个关键性的打击!当一个爬虫被阻塞时,首先需要为IP选择代理IP软件。
在使用代理IP软件的同时,也要注意适当降低爬虫的抓取频率,将抓取时间设置的长一点,访问时使用随机数,需要抓取多个页面时设置随机访问和抓取。我们甚至可以说,代理ip软件是网络爬虫的利器,因为没有动态IP代理软件,大家的网络爬虫都可能寸步难行。
Python中动态地址示例
我这里用的是最常用的requests来做的访问,可以加上一个反爬用的随机请求头。
Python from fake_useragent import UserAgent
使用
headers={'User-Agent':UserAgent().random}
核心参数proxies
这个单词很容易理解,百度查一下:代理人; (测算用的)代替物,指标; 代理权; 受托人; 代表权;
proxies的格式是一个字典,有 http 与 https 两种,在爬取不同网站时我们需要选用不同类型的网站时选用不同的 proxise,在不知道网站类型时可以将两种类型均放进去,requests 会自动选择合适的。
Python proxies = { "http": "http://IP地址:端口号", # http 型的 "https": "http://IP地址:端口号" # https 型的 }
具体示例代码
Python def randomRead(readUrl, index): """ 动态太访问 :param readUrl: :param index: :return: """ # 随机访问路径
getIp = requests.get(IPUrl, headers).text
# 设置访问
proxies = {
'http': getIp,
'https': getIp
}
# 随机访问路径
toUrl = readUrl[index]
# 加入动态IP
html = requests.get(toUrl, headers=headers, proxies=proxies)
# 设置随机间歇时间
random_time = random.uniform(12, 20)
time.sleep(random_time)
print(toUrl, "\n", html.status_code, ":", getIp, ":", round(random_time, 2))