Python爬虫—伪装代理(IP和User-Agent)
- 将你的爬虫伪装成浏览器(User-Agent)
- 让你的爬虫随机代理IP
- 代入解析
将你的爬虫伪装成浏览器(User-Agent)
导入所需要的包
import random
# 用于获取User_Agent
from fake_useragent import UserAgent
创建一个可随机返回User-Agent的函数
# 获取随机User_Agent伪装
def get_fake_User_Agent():
# 随机获取User_Agent
ua = UserAgent()
user_anget = ua.random
return user_anget
让你的爬虫随机代理IP
这里需要用到一个网站批量获取IP
我这里用到的是:89免费代理
由于小白能力有限,使用了简单的正则表达式爬取网站上的IP
函数中对爬取的IP也做了格式处理(感觉有点复杂了,希望有人可以简化一下)
# 获取IP伪装
def get_fake_IP():
ip_page = requests.get( # 获取200条IP
'http://www.89ip.cn/tqdl.html?num=60&address=&kill_address=&port=&kill_port=&isp=')
proxies_list = re.findall(
r'(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)(:-?[1-9]\d*)',
ip_page.text)
# 转换proxies_list的元素为list,最初为'tuple'元组格式
proxies_list = list(map(list, proxies_list))
# 格式化ip ('112', '111', '217', '188', ':9999') ---> 112.111.217.188:9999
for u in range(0, len(proxies_list)):
# 通过小数点来连接为字符
proxies_list[u] = '.'.join(proxies_list[u])
# 用rindex()查找最后一个小数点的位置,
index = proxies_list[u].rindex('.')
# 将元素转换为list格式
proxies_list[u] = list(proxies_list[u])
# 修改位置为index的字符为空白(去除最后一个小数点)
proxies_list[u][index] = ''
# 重新通过空白符连接为字符
proxies_list[u] = ''.join(proxies_list[u])
# proxies = {'协议':'协议://IP:端口号'}
# 'https':'https://59.172.27.6:38380'
return "'" + random.choice(proxies_list) + "'"
代入解析
使用代码:requests.get(url, headers=headers, proxies=proxies)
# 解析网址
def get_html(url):
headers = {
'User-Agent': get_fake_User_Agent()
}
proxies = {'http': get_fake_IP()}
resp = requests.get(url, headers=headers, proxies=proxies)
return resp
小白能力有限,其中可能有错或者不合理的地方,以上仅供参考。