您的位置:首页 > 编程语言 > Python开发

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

2017-08-16 13:31 931 查看
很多网站服务器都有反爬机制,作为一个用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的封锁会更慢,我们爬取数据会更有效,不用担心需要验证,无法访问等问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: