利用python爬虫(案例5)--X刺代理的小IP们

学习笔记


爬取X刺代理的小IP们

学完代理,我们发现网上找的很多免费代理IP都用不了,所以这里写一个简单的测试小案例,爬取一下某代理IP网站的免费代理IP,再遍历测试到底这些代理IP能不能用,哪些能用。


爬取步骤

获取要爬取的代理IP网站地址(http://www.xicidaili.com/nn/)

爬取页面内所有的代理IP及其端口号

测试代理IP

将可以用的代理IP存在一个csv文件里。


因为这个案例不是很复杂,所以我们就不写怎么查看网页源代码,怎么写Xpath,怎么研究URL特征这些步骤了,直接上代码


python代码

为了节省时间,我只测试了19个代理IP:

# -*- coding: utf-8 -*-

import requests
from lxml import etree
from fake_useragent import UserAgent
import time
import csv

        


class IpSpider:
    def __init__(self):
        self.url = 'http://www.xicidaili.com/nn/'
    
    def get_ua(self):
        return UserAgent().random
    
    def get_page(self):
        headers = {'User-Agent':self.get_ua()}
        res = requests.get(self.url, headers = headers)
        html = res.content.decode('utf-8')
        
        print('url:', res.url)
        print('code:', res.status_code)
        #print(html)
        self.get_ip_list(html)
        
        
    def get_ip_list(self, html):
        html_parse = etree.HTML(html)
        xpath = '//table[@id="ip_list"]//tr'
        r_list = html_parse.xpath(xpath)
        #print(r_list)
        
        proxy_list = []
        
        for p in r_list[1:20]:
            my_ip = p.xpath('./td[2]/text()')[0]
            my_port = p.xpath('./td[3]/text()')[0]
            #print('代理IP:', my_ip)
            proxy_list.append(
                {'http':'http://{}:{}'.format(my_ip, my_port), 
                'https':'https://{}:{}'.format(my_ip, my_port)})
        
        self.test_ip(proxy_list)
    
    def test_ip(self, proxy_list):
        
        useful_proxy = []
        
        for proxy in proxy_list:
            print(proxy)
            headers = {'User-Agent':self.get_ua()}
            
            try:
                
                res = requests.get(self.url, 
                                   headers = headers,
                                   proxies = proxy,
                                   timeout = 4)
                #如果请求超过3秒没有相应则默认该代理不能用
                
            except Exception as e:
                print('此代理IP无法使用......')
                
            else:
                useful_proxy.append(proxy)
                print(proxy)
        
        self.write_ip(useful_proxy)
            
    def write_ip(self, proxy_list):
        
        with open('./test/my_test_proxy.csv', 'w', newline = '') as f:
            writer = csv.writer(f)
            writer.writerow(['http', 'https'])
            for item in proxy_list:
                 writer.writerow([item['http'], item['https']])
        
        
    def main(self):
        self.get_page()

        

if __name__ == '__main__':
    start = time.time()
    spider = IpSpider()
    spider.main()
    end = time.time()
    print('执行时间:%.2f' % (end-start))
    



部分结果:

此代理IP无法使用......
{'http': 'http://111.231.239.143:1081', 'https': 'https://111.231.239.143:1081'}
此代理IP无法使用......
{'http': 'http://115.223.64.38:8010', 'https': 'https://115.223.64.38:8010'}
此代理IP无法使用......
执行时间:70.16

可用的代理IP


我们打开存放可用代理IP的csv文件,看一下有哪些IP:

http,https
http://125.126.117.30:60004,https://125.126.117.30:60004
http://125.126.113.184:60004,https://125.126.113.184:60004
http://112.16.217.191:808,https://112.16.217.191:808

好了,这个小案例完结…

发布了219 篇原创文章 · 获赞 102 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105574164