1.抓取ip存入文件
首先,我們訪問西刺首頁 http://www.xicidaili.com/,並點擊國內高匿代理,如下圖:
按 F12 檢查網頁元素或者 ctrl+u查看網頁源代碼:
我們需要提取的是 ip 和端口,這裏我們用正則提取,代碼如下:
# -*- coding:utf8 -*-
import urllib2
import re
import time
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Hosts': 'hm.baidu.com',
'Referer': 'http://www.xicidaili.com/nn',
'Connection': 'keep-alive'
}
# 指定爬取範圍(這裏是第1~1000頁)
for i in range(1,1000):
url = 'http://www.xicidaili.com/nn/' + str(i)
req = urllib2.Request(url=url,headers=headers)
res = urllib2.urlopen(req).read()
# 提取ip和端口
ip_list = re.findall("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?(\d{2,6})", res, re.S)
# 將提取的ip和端口寫入文件
f = open("ip.txt","a+")
for li in ip_list:
ip = li[0] + ':' + li[1] + '\n'
print ip
f.write(ip)
time.sleep(2) # 每爬取一頁暫停兩秒
2.提取可用ip並存入文件
剛纔爬取的 ip 有大量都是不可用的,我們需要將可用的 ip 提取出來,這裏我們使用站長之家的 ip 查詢 http://ip.chinaz.com/, 如下圖:
代碼如下:
# -*- coding:utf8 -*-
import urllib
import socket
socket.setdefaulttimeout(3)
inf = open("ip.txt") # 這裏打開剛纔存ip的文件
lines = inf.readlines()
proxys = []
for i in range(0,len(lines)):
proxy_host = "http://" + lines[i]
proxy_temp = {"http":proxy_host}
proxys.append(proxy_temp)
# 用這個網頁去驗證,遇到不可用ip會拋異常
url = "http://ip.chinaz.com/getip.aspx"
# 將可用ip寫入valid_ip.txt
ouf = open("valid_ip.txt", "a+")
for proxy in proxys:
try:
res = urllib.urlopen(url,proxies=proxy).read()
valid_ip = proxy['http'][7:]
print 'valid_ip: ' + valid_ip
ouf.write(valid_ip)
except Exception,e:
print proxy
print e
continue
至此,可用 ip 已成功寫入文件.