python 爬虫搭建代理库

python 爬虫搭建代理库

python 爬虫搭建代理库
*近科研由于需要用到微博签到数据,于是就写了个爬虫程序爬取微博签到位置信息,普通的爬取效率太低, 通过多线程又会被遭到IP的封禁,于是就自己写了个创建代理池的程序。
首先找到一个比较稳定的免费代理ip的网址,我这里推荐两个https://www.kuaidaili.com/free/inha,https://ip.jiangxianli.com。这里我拿第二个举例子。
*步就是爬取这个网站,把里面的ip地址和端口号以及类型给爬取下来,具体爬取方法这里就不再多说,就是*基本的request+bs4就可以了,废话不多说直接上代码

def get_ip():
# 定义三个列表分别存放ip,端口和类型
ips, ports, types = [], [], []
# 请求头
headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68”
}
# 这里我爬取了99页
for page in range(1, 100):
try:
url = f’https://ip.jiangxianli.com/?page={page}’
resp = requests.get(url, headers=headers, verify=False)
print(resp.status_code)
# BeautifuSoup解析文档
soup = BeautifulSoup(resp.text, “html.parser”)
tbody = soup.find(“tbody”)
for tr in tbody.find_all(“tr”):
tds = tr.find_all(“td”)
# 将ip,端口号以及类型存入列表
ips.append(tds[0].text)
ports.append(tds[1].text)
types.append((tds[3]).text)
time.sleep(1)
print(f”{page}页”)
except:
print(“请求失败”)
# 返回ip,端口以及类型列表
return ips, ports, types

第二步,就是检验爬取的ip地址是否可用,把可用的代理ip地址存起来,方便以后调用,这里我就用百度的首页来检验了。上代码

def check_ip():
# 获取爬到的数据
ips, ports, types = get_ip()
# 定义请求头
headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68”
}
# 定义一个列表保存可以用的ip地址
good_ip = []
for i in range(len(ips)):
# 定义一个代理对象
proxy = {}
# 将遍历得到的ip地址, 端口以及类型存入对象
proxy[types[i]] = ips[i] + “:” + ports[i]
try:
resp = requests.get(“https://www.baidu.com”, headers=headers, proxies=proxy, verify=False)
# 判断请求是否成功
if resp.status_code == 200:
# 把可用的ip 存入事先声明的列表中
good_ip.append(proxy)
print(f”可用的ip{i+1}”)
except Exception as e:
print(proxy, e)
# 返回可用的代理ip列表
return good_ip