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的封锁会更慢,我们爬取数据会更有效,不用担心需要验证,无法访问等问题
我们在不断爬取大量数据的时候,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的封锁会更慢,我们爬取数据会更有效,不用担心需要验证,无法访问等问题
相关文章推荐
- 使用python验证代理IP是否可用
- 使用python验证代理ip是否可用的实现方法
- Python Flask使用Nginx做代理时如何获取真实IP
- 使用python为爬虫获取免费代理ip
- python 爬取西刺免费代理ip 并使用telnetlib.Telnet验证是否有效
- 利用python爬虫批量获取代理IP并验证可用性
- 在 python 使用socket 获取 IP
- 分享一个获取代理ip的python函数
- c#使用HttpWebRequest,HttpWebResponse快速验证代理IP是否有用
- Python使用django获取用户IP地址的方法
- 使用gecco获取代理IP,仅测试代码用,不要用于非法用途
- Asp.Net使用代理IP远程获取数据
- 分享一个获取代理ip的python函数
- Python 设置 IP 代理 访问网页 ( 用户名密码验证代理 )
- Python 爬虫入门(二)—— IP代理使用
- Python 爬虫入门(二)—— IP代理使用
- Python使用django获取用户IP地址的方法
- python编写的自动获取代理IP列表的爬虫-chinaboywg-ChinaUnix博客
- Python 爬虫入门(二)—— IP代理使用 - 不剃头的一休哥 - 博客园
- python使用Flask框架获取用户IP地址的方法