python 指定ip访问url使用代理ip打开url

代理IP知识问答
Python 爬虫如何破解ip限制,让网站无法屏蔽?
提问时间: 12:49:17 &&&楼主:未知网友&&&阅读量:7015
有人说用代理IP,但是代理ip又找不到合适的,有没有什么好的方法,求各位朋友解答。
1楼(未知网友)我朋友试了,无法突破,然后我问了同学,他们都是用代理IP的。
2楼(站大爷用户)这个问题根 python 无关。
3楼(未知网友)代理IP很好弄啊,除了google一下,你也可以多找几个哥们的或者公司的主机,在他们电脑上设置一下,然后他们的IP地址就变成你的代理IP了。
4楼(未知网友)去黑市上多买点肉鸡。
5楼(站大爷用户)批量抓代理:很多网站都提供了免费的代理列表,自己写个脚本验证下这些代理是否可用就行了。可以参考:Python获取免费的可用代理
6楼(未知网友)试试修改X-Fordwarded-For http头
7楼(站大爷用户)不怕花钱的话,EC2 多弄几台,一个小时重启一次,每次IP不一样。
8楼(站大爷用户)其他回答都弱爆了,让你们的爬虫走Tor就可以了版权所有 @李锋
9楼(未知网友)曾经跟某创业团队(很优秀的一家技术型公司)交流,说到他们一项业务需要用到XXXX网的数据,就自己写爬虫去抓。(后来也跟该网站做了合作,取得了数据的使用权)抓的过程中,他们去XX云开了100个实例。好像一共就抓了一天就搞定了。成本并没有多少。现在云计算平台一小时大概也就一两毛钱,自带外网ip。所以花很少的钱就可以解决了。在代码层面把不同机器的任务分配做好就可以。
10楼(未知网友)我的一个朋友 @kula 的做法是拥有几百台不同的肉鸡(?
友情链接 (合作QQ):&&&&&&
警告:本站不搜集数据不存储数据,也不买卖数据,本站资源仅限用来计算机技术学习参考及大数据应用等合法行为,用户所有操作行为均有日志记录存档并保留6个月,用户若擅自利用本站资源从事任何违反本国(地区)法律法规的活动,由此引起的一切后果与本站无关。
&CopyRight
&&&ICP备案:&&&增值电信经营许可证:&&&&客服QQ:
&&投诉建议:&&&
站大爷交流群:&&&
开发者交流群:Python -爬虫-抓取代理 ip 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
Python -爬虫-抓取代理 ip 问题
· 315 天前 · 1963 次点击
抓取代理 ip 时,获得的端口号与网页上显示的端口号不一样,有没有什么办法获取正确的端口号?
16 回复 &| &直到
14:49:50 +08:00
& &315 天前
代码发上来看看 没代码怎么分析呢
& &315 天前
过滤掉 display:
& &315 天前
import requests
from lxml import etree
class Proxy(object):
def __init__(self):
self.tm_url = ''
def get_proxy(self, url):
r = requests.get(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows x86; rv:19.0) Gecko/ Firefox/19.0,'
html = etree.HTML(r.content)
all_proxy = html.xpath('//table//tr[td]')
for i in all_proxy:
ip_port = ''.join(i.xpath('./td[1]/span[@style]/text()|'
'./td[1]/div[@style]/text()|'
'./td[1]/p[@style]/text()|'
'./td[1]/text()|'
'./td[1]/span[@class]/text()'))
ip, port = ip_port.split(':')
anonymous = i.xpath('./td[2]/a/text()')[0]
http_type = ''.join(i.xpath('./td[3]/a/text()')) or 'http'
proxy = (ip, port, anonymous, http_type)
yield proxy
def start(self):
for page in range(1, 3):
tm_url = self.tm_url.format(page=page)
for proxy in self.get_proxy(tm_url):
yield proxy
if __name__ == '__main__':
p = Proxy()
for i in p.start():
& &315 天前
@ ip 可以正确获取,端口有问题
& &315 天前
端口肯定利用 js 转换了
& &315 天前
& &315 天前
推荐个用着不错的 爬虫代理
& &315 天前
@ 非常感谢
& &315 天前
# 先测试下能不能识别代码
# 尤其是换行
def _(d):
& &315 天前
翻出来了原来写的。。
```python
def goubanjia_com(self, *args):
self.THREAD_ID += 1
url = '' % (i)
r = requests.get(url, headers=self.http_headers())
if r.status_code == 404:
html = BeautifulSoup(r.text, 'lxml')
tbody = html.tbody
for tr in tbody.find_all('tr'):
p = proxy()
[x.extract() for x in tr.find_all('p')]
_ = tr.find_all('td', {'class':&ip&})[0].text
_ = _.split(':')
p.ip = _[0]
p.port = int(_[1])
# p.port = int(tr.find_all('td', {'data-title':&PORT&})[0].text)
p.safe = tr.find_all('td')[1].text.replace(' ', '').replace('\n', '').replace('\t', '')
p.type = tr.find_all('td')[2].text.replace(' ', '').replace('\n', '').replace('\t', '')
p.place = tr.find_all('td')[3].text.replace(' ', '').replace('\n', '').replace('\t', '').replace('\r', '').replace('\xa0', '')
p.net = tr.find_all('td')[4].text.replace(' ', '').replace('\n', '').replace('\t', '')
except IndexError as e:
logger.error('%s is index error' % p)
logger.debug('&get&%s' % p)
self.wait_for_verify.put(p)
self.THREAD_ID += 1
self.add_thread(self.verify_proxy_thread, self.THREAD_ID)
logger.debug('%s ok' % url)
gevent.sleep(1)
except AttributeError as e:
# print(r.text)
gevent.sleep(10)
logger.error('%s Error, sleep 10s' % url)
& &315 天前
& &315 天前
var _$ = ['.port', &each&, &html&, &indexOf&, '*', &attr&, 'class', &split&, & &, &&, &length&, &push&, 'ABCDEFGHIZ', &parseInt&, &join&, ''];
$(function() {
$(_$[0])[_$[1]](function() {
var a = $(this)[_$[2]]();
if (a[_$[3]](_$[4]) != -0x1) {
var b = $(this)[_$[5]](_$[6]);
b = (b[_$[7]](_$[8]))[0x1];
var c = b[_$[7]](_$[9]);
var d = c[_$[10]];
var f = [];
for (var g = 0x0; g & g++) {
f[_$[11]](_$[12][_$[3]](c[g]))
$(this)[_$[2]](window[_$[13]](f[_$[14]](_$[15])) && 0x3)
} catch (e) {}
})
})
这是解密代码哦
& &315 天前
非常感谢,我看一看
& &315 天前
def get_poxy(port_word):
_, word = port_word.split(' ')
num_list = []
for item in word:
num = 'ABCDEFGHIZ'.find(item)
num_list.append(str(num))
port = int(&&.join(num_list)) && 0x3
return port
可以试下我这个函数~ 拿到端口那里的大写字母,传进去就返回了~
& &314 天前
@ 厉害 关键还是解密 JS
& &313 天前
@ 很厉害,函数可以获得正确的结果,非常感谢
@ 解密代码从哪里可以找到呢?
& · & 2187 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 22ms · UTC 11:18 · PVG 19:18 · LAX 04:18 · JFK 07:18? Do have faith in what you're doing.Python 爬虫入门(二)—— IP代理使用 - 不剃头的一休哥 - 博客园
posts - 14, comments - 144, trackbacks - 0, articles - 0
  上一节,大概讲述了Python 爬虫的编写流程, 从这节开始主要解决如何突破在爬取的过程中限制。比如,IP、JS、验证码等。这节主要讲利用IP代理突破。
  1.关于代理
  简单的说,代理就是换个身份。网络中的身份之一就是IP。比如,我们身在墙内,想要访问google、u2b、fb等,直接访问是404,所以要换个不会被墙的IP,比如国外的IP等。这个就是简单的代理。
  在爬虫中,有些网站可能为了防止爬虫或者DDOS等,会记录每个IP的访问次数,比如,有些网站允许一个IP在1s(或者别的)只能访问10次等,那么我们就需要访问一次换一个IP(具体什么策略,自己决定)。
  那么问题来了,这些代理从哪得到?对于公司来讲,买代理IP。但是对于个人的话,可能会有浪费。那么怎么办呢?网上有很多免费的代理IP网站,但是手动更改的话,很浪费时间,并且免费的IP有很多不可用。所以,我们可以用爬虫爬那么IP。用上一节的代码,完全可以做到。这里我们用http://www.xicidaili.com/nn/1测试,声明:仅学习交流,切勿用作商业用途等
  2.获取代理IP,代码如下:
#encoding=utf8
import urllib2
import BeautifulSoup
User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/ Firefox/43.0'
header = {}
header['User-Agent'] = User_Agent
url = 'http://www.xicidaili.com/nn/1'
req = urllib2.Request(url,headers=header)
res = urllib2.urlopen(req).read()
soup = BeautifulSoup.BeautifulSoup(res)
ips = soup.findAll('tr')
f = open("../src/proxy","w")
for x in range(1,len(ips)):
ip = ips[x]
tds = ip.findAll("td")
ip_temp = tds[2].contents[0]+"\t"+tds[3].contents[0]+"\n"
# print tds[2].contents[0]+"\t"+tds[3].contents[0]
f.write(ip_temp)
  代码说明:
    a).这里我们使用的urllib2模块,因为,这个请求有点特殊,服务器会验证请求中的header(如有疑问,可参考http的相关资料)
    b).urllib2与urllib的区别在于,urllib2发送请求的时候可携带参数(我现在只用到这点区别)
    c).open()用于打开文件,第一个参数是文件的路径可以填绝对路径,例如E:\\proxy("\"在编程中是特殊字符,要用"\\"代表实际的"\")。也可以是相对路径,比    如"../src/proxy",就是文件相对于代码的位置。第二个参数"w",代表打开文件的权限,w代表写权限,r代表读权限。这个在很多系统中都通用。比如,linux等
    d).for循环,如果之前学过java或者其他高级语言,可能不太习惯,因为他们用的是for(;;)这样的。python中的for循环,in 表示X的取值,按顺序取到in后面的参数
 特别注意:别忘了for语句后面的冒号(":")
    c).range函数,代表生成一系列数,如果range(0,6,1),意思就是从0开始,到6结束(不包括6),每次增加1(也就是步长为1),生成一个数组,结果就是[0, 1, 2, 3, 4, 5]
    e).f.write()就是往文件里面写数据,如果打开文件的时候,没有"w"权限,则无法写入。
  页面截图:
  运行结果:
  3.并不是所有的代理都能用,原因有很多,可能是我们所处的网络连不到这个代理,也有可能是这个代理,连不到我们的目标网址,所以,我们要验证一下。以http://ip.chinaz.com/getip.aspx作为目标网址为例(这个是测试ip地址的网址)代码如下:
#encoding=utf8
import urllib
import socket
socket.setdefaulttimeout(3)
f = open("../src/proxy")
lines = f.readlines()
proxys = []
for i in range(0,len(lines)):
ip = lines[i].strip("\n").split("\t")
proxy_host = "http://"+ip[0]+":"+ip[1]
proxy_temp = {"http":proxy_host}
proxys.append(proxy_temp)
url = "http://ip.chinaz.com/getip.aspx"
for proxy in proxys:
res = urllib.urlopen(url,proxies=proxy).read()
except Exception,e:
print proxy
  代码说明:
    a).ip = lines[i].strip("\n").split("\t") 这个是去掉每行末尾的换行符(也就是"\n"),然后以制表符(也就是"\t")分割字符串为字符串数组
    b).proxy_temp = {"http":proxy_host}其中http代表代理的类型,除了http之外还有https,socket等这里就以http为例
    c).urllib.urlopen(url,proxies=proxy) 其中proxies就是代理。以代理模式访问目标网址
    d).socket.setdefaulttimeout(3)设置全局超时时间为3s,也就是说,如果一个请求3s内还没有响应,就结束访问,并返回timeout(超时)
  运行结果如图:
  从结果看可用的并不是很多。但是也够个人用了。
  至此,IP代理的使用就结束了。
  备注:
  1.代码仅供学习交流,切勿用作商业用途
  2.代码如有问题,多多指教
  3.转载请注明出处使用python进行post操作,如何不用url而直接用ip
[问题点数:40分,结帖人wh]
使用python进行post操作,如何不用url而直接用ip
[问题点数:40分,结帖人wh]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|> 博客详情
#!&/usr/bin/env&python3
#&-*-&coding:utf-8&-*-
'python进行代理的curl数据提交'
__author__&=&'ken'
curPath&=&os.path.abspath(os.path.dirname(__file__));
sys.path.append(curPath);
import&urllib.
import&urllib.
class&curl:
&&&&def&__init__(self):
&&&&#&获取用户浏览器信息
&&&&def&getUserAgent(self):
&&&&&&&&userAgent&=&'Mozilla/5.0&(Windows&NT&6.1;&WOW64;&rv:39.0)&Gecko/&Firefox/39.0';
&&&&&&&&return&userA
&&&&#&进行数据提交
&&&&def&run(self,&url,&param):
&&&&&&&&self.url&=&
&&&&&&&&self.param&=&
&&&&&&&&self.userAgent&=&self.getUserAgent();
&&&&&&&&self.proxyIpList&=&['117.135.196.197:55336',&'117.158.98.214:80',&'117.177.243.42:84',&'117.177.243.42:85'];
&&&&&&&&data&=&urllib.parse.urlencode(self.param).encode(encoding='UTF8');
&&&&&&&&req&=&urllib.request.Request(self.url,&data);
&&&&&&&&req.add_header('User-Agent',&self.userAgent);
&&&&&&&&for&proxyIp&in&self.proxyIpList:
&&&&&&&&&&&&socket.setdefaulttimeout(3);&&#&3秒未响应则为超时,跳过执行下一条
&&&&&&&&&&&&try:
&&&&&&&&&&&&&&&&#&添加代理
&&&&&&&&&&&&&&&&proxy_handler&=&urllib.request.ProxyHandler({'http':&proxyIp});
&&&&&&&&&&&&&&&&proxy_auth_handler&=&urllib.request.ProxyBasicAuthHandler();
&&&&&&&&&&&&&&&&opener&=&urllib.request.build_opener(proxy_handler,&proxy_auth_handler);
&&&&&&&&&&&&&&&&#&添加头信息
&&&&&&&&&&&&&&&&opener.addheaders&=&[
&&&&&&&&&&&&&&&&&&&&('User-Agent',&self.userAgent)
&&&&&&&&&&&&&&&&]
&&&&&&&&&&&&&&&&#&数据请求
&&&&&&&&&&&&&&&&response&=&opener.open(self.url,&data);
&&&&&&&&&&&&&&&&#&获取请求返还数据
&&&&&&&&&&&&&&&&response_data&=&response.read().decode("utf8");
&&&&&&&&&&&&&&&&print(proxyIp,&"正确:"&+&response_data);
&&&&&&&&&&&&&&&&#&return&response_
&&&&&&&&&&&&except&urllib.error.HTTPError&as&e:
&&&&&&&&&&&&&&&&print(proxyIp,&"错误:错误代码:",&e.code);
&&&&&&&&&&&&&&&&#&print("错误内容:",&e.read().decode("utf8"));
&&&&&&&&&&&&except&urllib.error.URLError&as&e:
&&&&&&&&&&&&&&&&print(proxyIp,&'错误:未能获取服务器信息.');
&&&&&&&&&&&&&&&&#&print('错误原因:&',&e.reason);
&&&&&&&&&&&&except:
&&&&&&&&&&&&&&&&print(proxyIp,&"错误:其他未知错误!");
#&cu&=&curl();
#&cu.run("www.test.com","{"key":}");
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥

我要回帖

更多关于 python2 打开url 的文章

 

随机推荐