【Python代理池是什么意思?Python中代理池如何搭建】在编写python爬虫程序代码时,虽然是直接使用的get或者是post方法来请求网站并返回数据 。但是在这个过程之中实际上是用本机的ip地址访问网站的,一旦同一ip访问次数过多就会被拦截 。所以python爬虫会使用多个ip来访问网站,这就需要建立代理池了 。

一、python代理池
在来理解代理池的概念之前需要知道什么是代理,当我们用电脑或者是手机,只要是用网络去连接上互联网的时候,就会默认的用当前ip地址去进行访问 。而代理指的就是在访问互联网时使用不同的ip,并且会将本机ip地址给隐藏起来 。
而python代理池就是将多个不同的ip放在一个数据结构里面,这个数据结构可以是文件也可以数据库之类的,只要是能够保存ip信息的都可以了 。
二、python搭建代理池
1.python之中搭建代理池实际上还是比较简单的,因为代理实际上是有免费和付费之分的,这里的实际就以免费的为例 。通过循环将代理ip从网站上抓取到并且保存起来,示例如下:
import timeimport requestsfrom bs4 import BeautifulSoupheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}for i in range(1, 36): time.sleep(2) print('第' + str(i) + '页') url = 'http://www.xicidaili.com/nn/' + str(i) response = requests.get(url=url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') all_trs = soup.find_all('tr') for tr in all_trs[1:]: all_tds = tr.find_all('td') ip = all_tds[1].get_text() port = all_tds[2].get_text() anonymous = all_tds[4].get_text() type = all_tds[5].get_text() for j in all_tds[6].find_all("div", attrs={"class": "bar"}): speed = j.get('title') with open('ip.csv', 'a+', encoding='utf-8-sig') as f: f.write(ip + ',' + port + ',' + anonymous + ',' + type + ',' + speed + '')2.在上面这一步就是将免费代理ip网站上可以用的都抓取回来了,但是现在还不能够直接去使用它们 。因为需要添加一些headers请求头信息才能让这些代理ip跨过验证,函数如下所示:
def get_user_agent(): user_agents=[ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)", "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", ] user_agent = random.choice(user_agents) return user_agenttime.sleep(2 + float(random.randint(1, 100)) / 20)
猜你喜欢
- Python二维数组如何添加元素?Python二维数组新增元素的方法是什么
- python如何删除字典中的键值对?python字典中的键值对如何进行删除?
- python如何将字典进行输出?python字典输出的方法是什么?
- 什么是python的占位符?python常见的占位符有哪些?
- Python如何执行外部命令?Python用什么方法运行命令行命令
- Python标识符是什么?Python标识符中的字符无效为什么
- Python中什么是类型注解?Python中类型注解如何使用?
- python中有哪些模块可以进行邮件?python中邮件需要使用哪些模块?
- Python中菱形继承是什么意思?Python菱形继承如何执行
- python进行数据类型转换需要注意什么?python进行数据类型转换的注意点
