requests中加入proxies参数后无法访问网址,究竟是代理质量不行还是其他地方出错了
本帖最后由 xiaochuan8264 于 2020-2-26 13:03 编辑import requests as r
from bs4 import BeautifulSoup as bf
import re
def getDetails(IpTag):
try:
ip = IpTag.find(text=re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'))
port = IpTag.find(text=re.compile('^(?!\d{2,3}\.)\d+))
protocol = IpTag.find(text=re.compile('(HTTP)|(HTTPS)')).lower()
finalIp = {protocol:protocol + '://' + ip + ':' + port}
except TypeError:
return None
return finalIp
def getIpList(bfObject):
targets = bfObject.find_all(name='tr',class_=True)
targets2 = bfObject.find_all(name='tr',class_='').pop(0)
targets.extend(targets2)
ipList = []
try:
count = 0
for each in targets:
ip = getDetails(each)
if ip == None:
print('在解析第 %d 项时出现了错误'% targets.index(each) + 1)
continue
count += 1
ipList.append(ip)
except:
print('解析出了问题, 共获取了 %d IP地址' % count)
finally:
return ipList
def ipAnalyze(ipDict):
ip = ipDict.get('http')
if ip != None:
return ip
else:
ip = ipDict.get('https')
return ip
def testIp(ip):
testUrl = 'https://www.whatismyip.com.tw/'
header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
temp = ipAnalyze(ip)
try:
web = r.get(url=testUrl, headers=header, proxies=ip, timeout=5)
except (r.exceptions.ProxyError, r.exceptions.ConnectTimeout):
print('%s === Bad Proxy | 无法连接、超时'% temp)
except KeyboardInterrupt:
raise
except:
print('%s === Bad Proxy | 其他'% temp)
else:
soup = bf(web.text, 'lxml')
result = soup.find(name='b', style=True).span['data-ip']
if temp.split('//') != result:
print('%s === Bad Proxy | IP地址未改变,现地址 %s'% (temp, result))
else:
print('\n%s === Functional Proxy\n'% temp)
proxyProvider = 'https://www.xicidaili.com/nn/'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
web = r.get(url=proxyProvider, headers=header, timeout=20)
webSoup = bf(web.text, 'lxml')
ipAcquired = getIpList(webSoup)
for each in ipAcquired:
testIp(each) 代码写的比较繁琐,但是能正常运行,在爬ip那有个错误,我直接忽略了,但是也能爬到100个IP,所以先不管了,但是运行下来100个IP全军覆没。。。。
http的IP可以访问网址,但是不能更改IP地址,https的直接就报错....是因为西刺代理的IP不行吗???尝试了网上的socks5的方法,就是这种:{'https':'socks5:// host+port'},但是依然报错。也尝试了关闭自己本地的VPN,还是不行....希望大神版主,或者任何有相关经历或者任何知情人士解答一下。 希望大神版主,或者任何有相关经历或者任何知情人士解答一下,不知道哪里触发了需要审核的词。。。 起因是想爬取豆瓣电影的一些信息,结果爬取了60多个之后就开始无法正常返回页面了,应该是被识别出来是爬虫了,所以想要写个代理。。。结果一个都用不了 楼主解决了吗,我也是这个问题,不懂怎么回事,到底是ip不行还是我代码有错 937135952 发表于 2021-8-21 10:20
楼主解决了吗,我也是这个问题,不懂怎么回事,到底是ip不行还是我代码有错
当然是免费代理不可靠 wp231957 发表于 2021-8-21 10:57
当然是免费代理不可靠
谢谢大佬
页:
[1]