爬取代理IP

爬取代理IP是最基础以及有必要的,当你想要爬取他人网站时,如果一直使用自己的IP地址,可能会造成网站的拒绝以及遭到被封的危险。

我们要爬取的IP地址是取自国内髙匿代理IP网站:

http://www.xicidaili.com/wt/

这里面的IP很多,你可以根据存活时间以及连接时间来爬取更有效的IP。

大致步骤为:

  1. 与对应网站连接获得网站页面信息。
  2. 在页面信息中提取你需要的数据,例如:我需要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’,写的不对就无法爬取到网站的数据。

(以上纯属自己分析,如有错误,请及时提出)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值