通过动态IP解决网络数据采集问题

118 阅读2分钟

说到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))