阿匠 发表于 2020-9-21 16:43:23

小甲鱼python56讲中使用代理ip问题

小甲鱼视频中www.whatismyip.com.tw 大陆用不了
就自己找了个测ip的网站http://ip.t086.com
然后找了代理ip的网站https://proxy.mimvp.com/freeopen
代码如下
import urllib.request
url='http://ip.t086.com/'
proxy_support=urllib.request.ProxyHandler({'http':'118.24.88.66:1080'})
opener=urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
response=urllib.request.urlopen(url)
html=response.read().decode('GBK')
print(html)
试了很多很多全是失败的
是测IP网站的问题还是 代理本身的问题 还是我的代码有问题啊

疾风怪盗 发表于 2020-9-21 20:13:59

可以试试这个
https://www.kuaidaili.com/free/
这个试下来是可以的

import requests
url='https://www.kuaidaili.com/free/'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Edg/85.0.564.51'}
proxy={'http':'118.212.106.81:9999'}
response=requests.get(url=url,headers=headers,proxies=proxy)
print(response)
html=response.content.decode()
print(html)

阿匠 发表于 2020-9-21 21:15:23

疾风怪盗 发表于 2020-9-21 20:13
可以试试这个
https://www.kuaidaili.com/free/
这个试下来是可以的

我想实现小甲鱼课件中那样的效果,可以帮帮我吗大佬,requests我还没学到- -

疾风怪盗 发表于 2020-9-21 21:23:00

阿匠 发表于 2020-9-21 21:15
我想实现小甲鱼课件中那样的效果,可以帮帮我吗大佬,requests我还没学到- -

不知道你说的效果是什么。。。。。。。

requests模块不是更方便么,为什么不用呢?都是一样的步骤

阿匠 发表于 2020-9-21 21:28:35

疾风怪盗 发表于 2020-9-21 21:23
不知道你说的效果是什么。。。。。。。

requests模块不是更方便么,为什么不用呢?都是一样的步骤

我的意思是想用一个ip查询的网站来检查我现在使用的ip地址是多少,然后在idle里面打印出来{:5_96:}

疾风怪盗 发表于 2020-9-21 22:07:55

阿匠 发表于 2020-9-21 21:28
我的意思是想用一个ip查询的网站来检查我现在使用的ip地址是多少,然后在idle里面打印出来

尝试了下
http://icanhazip.com
http://httpbin.org/ip
这两个应该是检测当前上网IP的
但是都不行

阿匠 发表于 2020-9-21 22:11:53

疾风怪盗 发表于 2020-9-21 22:07
尝试了下
http://icanhazip.com
http://httpbin.org/ip


那我改怎样用python检查我有没有用了代理ip啊。难受住…

疾风怪盗 发表于 2020-9-21 22:21:40

阿匠 发表于 2020-9-21 22:11
那我改怎样用python检查我有没有用了代理ip啊。难受住…

那不知道,而且我的代码也不对,用的是http的IP上https,也不能证明这个IP是否有效
这段代码应该是对的,应该是没找到能上网的IP,多试几个试试看
import requests
'''代理IP地址(高匿)'''
proxy = {
'http': 'http://117.85.105.170:808',
'https': 'https://117.85.105.170:808'
}
'''head 信息'''
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
       'Connection': 'keep-alive'}
'''http://icanhazip.com会返回当前的IP地址'''
p = requests.get('http://icanhazip.com', headers=head, proxies=proxy)
print(p.text)

疾风怪盗 发表于 2020-9-21 22:38:26

本帖最后由 疾风怪盗 于 2020-9-21 22:40 编辑

阿匠 发表于 2020-9-21 22:11
那我改怎样用python检查我有没有用了代理ip啊。难受住…

你看这个可以了,https的代理IP,用的有道翻译的接口,返回了IP的地址信息
之前发的代码应该也有效的,就是IP有没有用不知道了,代码里加个timeout=6,超时了就说明无效IP
要检测,可以把免费IP全爬下来之后,按个检测试试,说不定能测出来哪个有效的
网址:http://www.kxdaili.com/dailiip/1/2.html
下面这个代理IP是在这上面,测试了5个后找到的
import requests
url='https://foundation.youdao.com/ip/ipinfo'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Edg/85.0.564.51'}
proxy={'https':'58.220.95.90:9401'}

response=requests.get(url=url,headers=headers,proxies=proxy)
print(response)
html=response.content.decode()
print(html)

疾风怪盗 发表于 2020-9-22 12:39:48

试一下,爬下来,难得会有2、3个有效的免费代理IP
import requests
from lxml import etree
import re
import time

class Get_Free_Ip():
    def __init__(self):
      self.url1='http://www.kxdaili.com/dailiip/{}/{}.html'
      self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Edg/85.0.564.51'}

    def Get_Url1_data(self):
      ip_data_list1=[]
      for type_num in range(0,2):
            for page_num in range(0,10):
                start_url=self.url1.format(type_num+1,page_num+1)
                print(start_url)
                response=requests.get(url=start_url,headers=self.headers)
                html_str=response.content.decode()
                #print(html_str)
                patten='<td>(.*?)</td>'
                ip_data_temp=re.findall(patten,html_str)

                for each in range(0,len(ip_data_temp),7):
                  ip_data = {}
                  ip_data['IP地址']=ip_data_temp
                  ip_data['端口'] = ip_data_temp
                  ip_data['代理类型'] = ip_data_temp
                  ip_data_list1.append(ip_data)
                time.sleep(1)
      #print(ip_data_list1)
      return ip_data_list1


    def Change_data(self,ip_data_list):
      new_list=[]
      for each in ip_data_list:
            each['代理类型'] = each['代理类型'].split(',')
            for i in each['代理类型']:
                new_list_temp = {}
                if i=='HTTP':
                  new_list_temp['http'] = each['IP地址'] + ':' + each['端口']
                elif i=='HTTPS':
                  new_list_temp['https'] = each['IP地址'] + ':' + each['端口']
                new_list.append(new_list_temp)
      print(new_list)
      return new_list

    def Check_httpip(self,new_list):
      '''代理IP地址(高匿)'''
      new_list_active=[]
      for proxy in new_list:
            print(f'开始检测{proxy}...')
            if 'http' in proxy.keys() :
                '''http://icanhazip.com会返回当前的IP地址'''
                try:
                  response = requests.get(url='http://icanhazip.com', headers=self.headers, proxies=proxy,timeout=3)
                  print(f'返回结果:{response.text}')
                  new_list_active.append(proxy)
                  time.sleep(1)
                except:
                  print(f'{proxy}未返回结果,无效...')

            elif 'https' in proxy.keys() :
                try:
                  response = requests.get(url='https://foundation.youdao.com/ip/ipinfo', headers=self.headers, proxies=proxy,timeout=3)
                  print(f'返回结果:{response.text}')
                  new_list_active.append(proxy)
                  time.sleep(1)
                except:
                  print(f'{proxy}未返回结果,无效...')

      print(new_list_active)

      if len(new_list_active)>0:
            self.Save_To_Txt(new_list_active)
      else:
            print('无有效免费代理IP地址')

    def Save_To_Txt(self,list):
      with open('免费代理IP地址.txt', mode='w', encoding='utf-8') as f:
            for each in list:
                f.write(str(each))
                f.write('\n')

    def Run(self):
      #http://www.kxdaili.com/dailiip/1/1.html
      ip_data_list1=self.Get_Url1_data()
      new_list=self.Change_data(ip_data_list1)
      self.Check_httpip(new_list)

if __name__ == '__main__':
    get_freeip=Get_Free_Ip()
    get_freeip.Run()


阿匠 发表于 2020-9-22 14:01:10

疾风怪盗 发表于 2020-9-22 12:39
试一下,爬下来,难得会有2、3个有效的免费代理IP

大佬太给力啦,谢谢

冰西瓜 发表于 2020-10-14 19:22:41

我运行代码之后,用得到ip去改电脑代理之后,也不能搜索ip看到自己的ip地址

qwer12138 发表于 2021-1-12 20:37:18

疾风怪盗 发表于 2020-9-21 21:23
不知道你说的效果是什么。。。。。。。

requests模块不是更方便么,为什么不用呢?都是一样的步骤

大佬,我返回的时候idle提示我是一千多行的代码,这是咋回事啊?
页: [1]
查看完整版本: 小甲鱼python56讲中使用代理ip问题