爬取代理IP是最基础以及有必要的,当你想要爬取他人网站时,如果一直使用自己的IP地址,可能会造成网站的拒绝以及遭到被封的危险。
我们要爬取的IP地址是取自国内髙匿代理IP网站:
这里面的IP很多,你可以根据存活时间以及连接时间来爬取更有效的IP。
大致步骤为:
- 与对应网站连接获得网站页面信息。
- 在页面信息中提取你需要的数据,例如:我需要tr标签里的数据,则采用
ips = soup.find_all('tr')
具体代码为:
# IP地址取自国内髙匿代理IP网站:http://www.xicidaili.com/nn/
from bs4 import BeautifulSoup
import requests
import random
from fake_useragent import UserAgent
#功能:爬取IP存入ip_list列表
def get_ip_list(url, headers):
web_data = requests.get(url, headers=headers)
soup = BeautifulSoup(web_data.text, 'lxml')
ips = soup.find_all('tr')
ip_list = []
for i in range(1, len(ips)):
ip_info = ips[i]
tds = ip_info.find_all('td') #tr标签中获取td标签数据
if not tds[8].text.find('天')==-1:
ip_list.append(tds[1].text + ':' + tds[2].text)
return ip_list
#功能:1,将ip_list中的IP写入IP.txt文件中
# 2,获取随机IP,并将随机IP返回
def get_random_ip(ip_list):
proxy_list = []
for ip in ip_list:
proxy_list.append('http://' + ip)
f=open('IP.txt','a+',encoding='utf-8')
f.write('http://' + ip)
f.write('\n')
f.close()
proxy_ip = random.choice(proxy_list)
proxies = {'http': proxy_ip}
return proxies
if __name__ == '__main__':
for i in range(1,3):
url = 'http://www.xicidaili.com/wt/{}'.format(i)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
}
ip_list = get_ip_list(url, headers=headers)
proxies = get_random_ip(ip_list)
print(proxies)
要看懂这个代码,首先要了解requests、BeautifulSoup等库的运用,特别是requests.get(url,headers,proxies)以及BeautifulSoup中获取标签中数据的方法。我的代码中只获取了两页的IP,并且将其保存到了txt文件中,以便以后得以运用。在后来爬取网站中,可以从中读取一个IP,作为代理IP。
在爬取别的网站时,要注意headers的伪装,不然很容易拒绝你的连接。当然还有别的方面,例如代理IP在何时得用‘https’或‘http’,写的不对就无法爬取到网站的数据。
(以上纯属自己分析,如有错误,请及时提出)