代理ip通常只能购买,免费的ip可用率极低
如果不是有短时间爬取巨量数据的需求,一般没必要使用代理服务器。毕竟可以通过随机睡眠降低对服务器的访问频次。同时,请不要使用我的url和Cookie!
"""
代理就是指代理服务器,代理服务器用来转发请求和响应。如果我们的爬虫在短时间内对同一个服务器发起的高频的请求,我们的ip就有可能被禁掉。
如果ip被禁,我们就可以使用代理服务器来转发请求。这样服务器接受到的请求对应的ip地址就是代理服务器的ip地址,而不是我们客户端的。
"""
import requests
from re import findall, S
from fake_useragent import UserAgent
from random import choice
# 封装一个代理池
ua = UserAgent()
url = 'http://localhost:63342/Python.learning/requests%E5%BA%93%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0/%E4%BB%A3%E7%90%86%E6%B1%A0.html?_ijt=fmo1j72kp5geu6p0ujmb6dkks9&_ij_reload=RELOAD_ON_SAVE' # 生成的api链接
headers = {
'User-Agent': ua.random,
'Cookie': 'Pycharm-2b3ad7cf=59764cdb-ddc8-4f8c-8ded-b8f1e2f469e3'
}
page_text = requests.get(url=url, headers=headers).text
page_proxy = findall(r'"(.*?:.*?)"', page_text, S) # 妈的,提取个ip还真不容易,我现在也不知道为什么(<body>|<br>)不行
http_proxy = [] # 代理的列表
for proxy in page_proxy:
dic = {
'https': proxy
}
http_proxy.append(dic)
# 使用代理ip爬取数据
ips = [] # 将获取到的ip都装到这里
new_headers = {
'User-Agent': ua.random,
'Cookie': 'channelid=bdtg_a12_a12a1; sid=1704121510643509; __51vcke__K3h4gFH3WOf3aJqX=b1b71dbd-1a63-5f64-9114-c0f21bd06f75; __51vuft__K3h4gFH3WOf3aJqX=1704121511916; _gcl_au=1.1.2047629864.1704862104; _gid=GA1.2.108763967.1704862104; __51uvsct__K3h4gFH3WOf3aJqX=2; _ga_DC1XM0P4JL=GS1.1.1704862103.1.1.1704862327.60.0.0; _ga=GA1.2.245898219.1704121512; _gat=1; __vtins__K3h4gFH3WOf3aJqX=%7B%22sid%22%3A%20%222054bc42-ee9f-5c78-8c2d-3466f7b39616%22%2C%20%22vd%22%3A%203%2C%20%22stt%22%3A%20224459%2C%20%22dr%22%3A%20195773%2C%20%22expires%22%3A%201704864128544%2C%20%22ct%22%3A%201704862328544%7D'
}
for page in range(1, 11):
url = f'https://www.kuaidaili.com/free/inha/{page}'
content = requests.get(url=url, headers=new_headers, proxies=choice(http_proxy)).text
# 需要注意上面的proxies是不能用的,只是作为一个模版示范。实际ip还是需要花钱购买
page_ip = findall(r'<td data-title="IP">(.*?)</td>', content)
page_port = findall(r'<td data-title="PORT">(\d*)</td>', content)
for index in range(len(page_ip)):
get_proxy = f'{page_ip[index]}: {page_port[index]}'
ips.append(get_procy)