python:代理ip获取,验证,使用

很多网站服务器都有反爬机制,作为一个用python爬取数据的人,必须掌握怎么破解反爬机制。

我们在不断爬取大量数据的时候,ip很可能被网站封住,这样我们就无法继续爬取数据,怎么解决?:代理ip


代理ip怎么获取?:你可以百度自行搜索代理ip,然后可以手动粘贴保存,也可以直接对某网站的代理ip进行爬取。但是,我们获得的代理Ip并不是每一个都是有效的,我们德验证ip的有效性。

很简单:你可以在浏览器中打开internet选项,找到局域网设置中的代理服务器自己设置代理ip,设置好后如果可以继续打开网页那么就是有效的代理ip。  那么问题来了,这么多代理ip,我们总不可能一个个去输入验证吧,怎么办?你可以用下面的代码验证:

import urllib
import socket
socket.setdefaulttimeout(3)


proxys=[.....]


url = "http://ip.chinaz.com/getip.aspx"
for proxy in proxys:
    try:
        res = urllib.urlopen(url,proxies=proxy).read()
        print res
    except Exception,e:
        print proxy
        print e
        continue                                       #这个url是对ip进行验证的一个网站

还可以通过对其他网站的访问,看是否可以看到有效结果来进行验证:

import urllib2  
import random  
  
def getHtml(url,proxies):  
    random_proxy = random.choice(proxies)  
    proxy_support = urllib2.ProxyHandler({"http":random_proxy})  
    opener = urllib2.build_opener(proxy_support)  
    urllib2.install_opener(opener)  
    html=urllib2.urlopen(url)  
    return html  
  
url="https://www.1688.com/"  
proxies=["119.29.103.13:8888","117.57.242.217:8998"]  
for i in range(0,10000):  
    try:  
        html=getHtml(url,proxies)  
        print html.info()       
        print i  
    except:  
        print "error"                                          #当然这种方法无法看到具体哪个ip在 起作用,但是可以用于某网站在我们进行多少次搜索后会封锁我们的ip

找到有效的有用的ip,就是ip怎么使用了:

import urllib2  
import random  
  
def getHtml(url,proxies):  
    random_proxy = random.choice(proxies)
    
    proxy_support = urllib2.ProxyHandler({"http":random_proxy})  
    opener = urllib2.build_opener(proxy_support)  
    urllib2.install_opener(opener)  
    html=urllib2.urlopen(url)  
    return html  

url="http://www.1688.com" 
proxies=["218.205.114.218:8080"]


import re
from bs4 import BeautifulSoup
from distutils.filelist import findall


html=getHtml(url,proxies).read()
soup=BeautifulSoup(html,"html.parser")


for tag in soup.find_all('li',class_='fd-clr subnav_fzny'):
a_url=tag.find('a').get('href')
print (a_url)                                                                #这是我用某一个代理ip对阿里巴巴上进行爬取,

代理ip和selenium的使用代码:

from selenium import webdriver
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://218.205.114.218:8080')
chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get('https://www.1688.com')
results = chrome.find_elements_by_xpath("//ul[@class='mod-spm active']//li/a")
for result in results:
print result.text
当然,也可以使用很多个有效ip进行信息爬取,这样就像前面提到的一样,服务器对你ip的封锁会更慢,我们爬取数据会更有效,不用担心需要验证,无法访问等问题




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值