python爬虫-爬取代理IP并通过多线程快速验证

摘要:python爬虫-爬取代理IP并通过多线程快速验证...

作者:LoveCode标签:python,爬虫,爬取,代理,IP,多线程,验证

在爬取一个专利查询网站的时候,反扒非常严,所以找个这样一段代码,从免费代理Ip发布网站http://www.xicidaili.com/nn/获取代理IP

通过多线程验证码代理IP是否能够正常访问目标网站,网站需要设置cookies登录。


1. 代理ip采集 --西刺代理网站     

mport urllib2
from BeautifulSoup import BeautifulSoup
 
# get the proxy
of = open('proxy.txt', 'w')
for page in range(1,50):
    url = 'http://www.xicidaili.com/nn/%s' %page
    user_agent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"
    request = urllib2.Request(url)
    request.add_header("User-Agent", user_agent)
    content = urllib2.urlopen(request)
    soup = BeautifulSoup(content)
    trs = soup.find('table', {"id":"ip_list"}).findAll('tr')
    for tr in trs[1:]:
        tds = tr.findAll('td')
        ip = tds[2].text.strip()
        port = tds[3].text.strip()
        protocol = tds[6].text.strip()
        if protocol == 'HTTP' or protocol == 'HTTPS':
            of.write('%s=%s:%s\n' % (protocol, ip, port))
            print '%s://%s:%s' % (protocol, ip, port)


2. 验证     

import urllib2
import threading
 
inFile = open('proxy.txt', 'r')
outFile = open('available.txt', 'w')
url = 'http://www.huangshanben.com/'
lock = threading.Lock()
 
def test():
    lock.acquire()
    line = inFile.readline().strip()
    lock.release()
    # if len(line) == 0: break
    protocol, proxy = line.split('=')
    cookie = "PHPSESSID=5f7mbqghvk1kt5n9illa0nr175; kmsign=56023b6880039; KMUID=ezsEg1YCOzxg97EwAwUXAg=="
    try:
        proxy_support = urllib2.ProxyHandler({protocol.lower():'://'.join(line.split('='))})
        opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
        urllib2.install_opener(opener)
        request = urllib2.Request(url)
        request.add_header("cookie",cookie)
        content = urllib2.urlopen(request,timeout=4).read()
        if len(content) >= 1000:
            lock.acquire()
            print 'add proxy', proxy
            outFile.write('\"%s\",\n' %proxy)
            lock.release()
        else:
            print '出现验证码或IP被封杀'
    except Exception, error:
        print error
all_thread = []
for i in range(500):
    t = threading.Thread(target=test)
    all_thread.append(t)
    t.start()
 
for t in all_thread:
    t.join()
 
inFile.close()
outFile.close()


3. [代码]代理ip采集 --有代理网站     

import requests
import re
 
of = open('proxy.txt', 'w')
url = 'http://www.youdaili.net/Daili/guonei/3661'

for i in range(1,4):
    if i == 1:
        Url = url+'.html'
    else:
        Url = url+'_%s.html' %i
    html = requests.get(Url).text
    res = re.findall(r'\d+\.\d+\.\d+\.\d+\:\d+', html)
    for pro in res:
        of.write('http=%s\n' %pro)
        print pro
        
of.closed


4. [代码]代理IP采集--好代理网站     

# -*- coding:utf8 -*-
import requests
import re
import time
from BeautifulSoup import BeautifulSoup

of = open('proxy.txt', 'w')
url = 'http://www.haodailiip.com/guonei/'
for i in range(1,20):
    Url = 'http://www.haodailiip.com/guonei/' + str(i)
    print "正在采集"+Url
    html = requests.get(Url).text
    bs = BeautifulSoup(html)
    table = bs.find('table',{"class":"proxy_table"})
    tr = table.findAll('tr')
    for i in range(1,31):
        td = tr[i].findAll('td')
        proxy_ip = td[0].text.strip()
        proxy_port = td[1].text.strip()
        of.write('http=%s:%s\n' %(proxy_ip,proxy_port))
        print 'http=%s:%s\n' %(proxy_ip,proxy_port)
    time.sleep##2##  #把##改为()
of.closed


5. [代码]附第三方代理工具     

http://my.oschina.net/u/2463131/blog/512384
CopyRight © 2017 荒山本的官方网站 粤ICP备16049175号 All Right Service 网站地图(xml) 网站地图(html)