• 实战1:建立代理IP池


    一、爬取免费代理IP

    1、爬取代理IP:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Meng Zhaoce
    import requests
    from bs4 import BeautifulSoup
    from multiprocessing.dummy import Pool as ThreadPool #多线程模块
    from pymongo import MongoClient
    data = []
    
    def getIp(page):
        url = 'https://www.xicidaili.com/nt/%d'%(page)
        headers ={
            'User-Agent' :'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
    
        }#伪装请求头
        res = requests.get(url,headers=headers).text #发送请求
        soup = BeautifulSoup(res,'lxml')
        for i in soup.find_all('tr'):
            try:
                data.append({'ip':'%s:%s'%(i.find_all('td')[1].get_text(),i.find_all('td')[2].get_text()),'verify':False})
            except:
                continue
    
    pool = ThreadPool(10)
    pool.map(getIp,[i for i in range(100)])
    pool.close()
    pool.join()
    print(data)
    print(len(data))
    
    db = MongoClient('127.0.0.1',27017).test
    db.ippool.insert_many(data)

    此处涉及知识点:请求库、解析库、多线程模块、菲关系型数据库

     二、建立代理IP池

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Meng Zhaoce
    import multiprocessing #引入多线程模块
    import time
    import requests
    from pymongo import MongoClient
    import redis
    db = MongoClient('127.0.0.1',27017).text
    url = 'http://www.baidu.com'
    ippool = []
    for i in db.ippool.find({'verify':False}):
        ippool.append(i['ip'])
    start = time.time()
    def verify(ip):
        proxies = {
            'http':'http://%s'%(ip)
        }
        try:
            res = requests.get(url,proxies=proxies,timeout=2)
            print(res.status_code)
            if res.status_code == 200:
                db.ippool.insert({'ip':ip,'verify':True})
                print('insert finished'.center(50,'*'))
        except Exception as e:
            print(e)
    
    pool = multiprocessing.Pool(processes=10)
    pool.map(verify,ippool[:100])
    print(time.time()-start)
    print('finshed')
  • 相关阅读:
    第一次Java测试及感触
    第七周学习
    第六周学习
    第5周学习
    第四周学习
    第三周学习
    浅略学习
    读完《大道至简》后的小感悟
    初识JAVA
    Java课后作业之石家庄地铁系统PSP表格20190403
  • 原文地址:https://www.cnblogs.com/1218-mzc/p/11780484.html
Copyright © 2020-2023  润新知