• python之爬快代理与自动登录抽屉网


    1.自动抽屉网

       注意class或id属性中可能会含有多个值并由空格隔开,此时要注意找到唯一的值,且只能有一个值。

    # 匹配到登录,然后用户名,然后输入,然后匹配密码,然后输入,然后回车
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium import webdriver
    import time
    chrome=webdriver.Chrome(r'D:360安全浏览器下载chromedriver_win32chromedriver')
    try:
        wait=WebDriverWait(chrome,30)
        chrome.get('https://dig.chouti.com/')
        search_button=wait.until(EC.presence_of_element_located((By.ID,"login_btn")))  #  匹配到登录选项
        search_button.click()
        time.sleep(3)
        # class 中需要只写唯一属性
        input_tag = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "login-phone")))  # 匹配到输入手机号
        input_tag.send_keys('在此输入你的手机号')
        password_tag = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "pwd-password-input")))
        password_tag.send_keys('在此输入你的密码')
        login_button = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "btn-large")))# 匹配到登陆按钮
        login_button.click()
        time.sleep(20)
    finally:
        chrome.close()

    2.爬西刺代理

    '''
    爬取西刺免费代理:
        1.访问西刺免费代理页面
        2.通过re模块解析并提取所有代理
        3.通过ip测试网站对爬取的代理进行测试
        4.若test_ip函数抛出异常代表代理作废,否则代理有效
        5.利用有效的代理进行代理测试
    
    <tr class="odd">
          <td class="country"><img src="//fs.xicidaili.com/images/flag/cn.png" alt="Cn"></td>
          <td>112.85.131.99</td>
          <td>9999</td>
          <td>
            <a href="/2019-05-09/jiangsu">江苏南通</a>
          </td>
          <td class="country">高匿</td>
          <td>HTTPS</td>
          <td class="country">
            <div title="0.144秒" class="bar">
              <div class="bar_inner fast" style="88%">
    
              </div>
            </div>
          </td>
          <td class="country">
            <div title="0.028秒" class="bar">
              <div class="bar_inner fast" style="97%">
    
              </div>
            </div>
          </td>
    
          <td>6天</td>
          <td>19-05-16 11:20</td>
        </tr>
    re:
        <tr class="odd">(.*?)</td>.*?<td>(.*?)</td>
    
    '''
    import requests
    import re
    import time
    
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
    }
    
    
    def get_index(url):
        time.sleep(1)
        response = requests.get(url, headers=HEADERS)
        return response
    
    
    def parse_index(text):
        ip_list = re.findall('<tr class="odd">.*?<td>(.*?)</td>.*?<td>(.*?)</td>', text, re.S)
        for ip_port in ip_list:
            ip = ':'.join(ip_port)
            yield ip
    
    def test_ip(ip):
        print('测试ip: %s' % ip)
        try:
            proxies = {
                'https': ip
            }
    
            # ip测试网站
            ip_url = 'https://www.ipip.net/'
    
            # 使用有效与无效的代理对ip测试站点进行访问,若返回的结果为200则代表当前测试ip正常
            response = requests.get(ip_url, headers=HEADERS, proxies=proxies, timeout=1)
    
            if response.status_code == 200:
                return ip
    
        # 若ip代理无效则抛出异常
        except Exception as e:
            print(e)
    
    # 使用代理爬取nba
    def spider_nba(good_ip):
        url = 'https://china.nba.com/'
    
        proxies = {
            'https': good_ip
        }
    
        response = requests.get(url, headers=HEADERS, proxies=proxies)
        print(response.status_code)
        print(response.text)
    
    
    if __name__ == '__main__':
        base_url = 'https://www.xicidaili.com/nn/{}'
    
        for line in range(1, 3677):
            ip_url = base_url.format(line)
    
            response = get_index(ip_url)
    
            ip_list = parse_index(response.text)
            for ip in ip_list:
                # print(ip)
                good_ip = test_ip(ip)
    
                if good_ip:
                    # 真是代理,开始测试
                    spider_nba(good_ip)
    
    爬取西刺免费代理进行代理测试

    3.爬快代理

    注意这里出错的原因可能是请求url出错,首页的url与第一页url可能是不一样的

    比如快代理的首页是:https://www.kuaidaili.com/free用此作为请求url会出错

    第一页:https://www.kuaidaili.com/free/inha/1/用此作为请求url不会出错

    '''
    爬取西刺免费代理:
        1.访问西刺免费代理页面
        2.通过re模块解析并提取所有代理
        3.通过ip测试网站对爬取的代理进行测试
        4.若test_ip函数抛出异常代表代理作废,否则代理有效
        5.利用有效的代理进行代理测试
    
    <table class="table table-bordered table-striped">
              <thead>
                  <tr>
                    <th>IP</th>
                    <th>PORT</th>
                    <th>匿名度</th>
                    <th>类型</th>
                    <th>位置</th>
                    <th>响应速度</th>
                    <th>最后验证时间</th>
                  </tr>
                </thead>
                <tbody>
    
                    <tr>
                        <td data-title="IP">175.44.159.33</td>
                        <td data-title="PORT">9000</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">中国 福建省 三明市 联通</td>
                        <td data-title="响应速度">0.8秒</td>
                        <td data-title="最后验证时间">2019-06-17 22:30:57</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">60.13.42.178</td>
                        <td data-title="PORT">9999</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">甘肃省平凉市  联通</td>
                        <td data-title="响应速度">2秒</td>
                        <td data-title="最后验证时间">2019-06-17 21:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">180.118.247.195</td>
                        <td data-title="PORT">9000</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">中国 江苏省 镇江市 电信</td>
                        <td data-title="响应速度">3秒</td>
                        <td data-title="最后验证时间">2019-06-17 20:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">117.91.248.174</td>
                        <td data-title="PORT">9999</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">江苏省扬州市  电信</td>
                        <td data-title="响应速度">2秒</td>
                        <td data-title="最后验证时间">2019-06-17 19:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">112.87.69.69</td>
                        <td data-title="PORT">9999</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">江苏省南通市  联通</td>
                        <td data-title="响应速度">0.5秒</td>
                        <td data-title="最后验证时间">2019-06-17 18:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">114.234.81.34</td>
                        <td data-title="PORT">9000</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">江苏省徐州市  电信</td>
                        <td data-title="响应速度">1秒</td>
                        <td data-title="最后验证时间">2019-06-17 17:31:00</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">124.205.143.212</td>
                        <td data-title="PORT">40585</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">北京市北京市  鹏博士宽带</td>
                        <td data-title="响应速度">2秒</td>
                        <td data-title="最后验证时间">2019-06-17 16:30:54</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">121.13.252.60</td>
                        <td data-title="PORT">41564</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">广东省东莞市  电信</td>
                        <td data-title="响应速度">0.7秒</td>
                        <td data-title="最后验证时间">2019-06-17 15:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">183.129.244.16</td>
                        <td data-title="PORT">12154</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">浙江省杭州市  电信</td>
                        <td data-title="响应速度">1秒</td>
                        <td data-title="最后验证时间">2019-06-17 14:31:00</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">219.159.38.208</td>
                        <td data-title="PORT">56210</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">内蒙古自治区赤峰市  联通</td>
                        <td data-title="响应速度">2秒</td>
                        <td data-title="最后验证时间">2019-06-17 13:30:59</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">122.243.11.150</td>
                        <td data-title="PORT">9000</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">浙江省金华市  电信</td>
                        <td data-title="响应速度">1秒</td>
                        <td data-title="最后验证时间">2019-06-17 12:31:01</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">183.129.244.16</td>
                        <td data-title="PORT">14153</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">浙江省杭州市  电信</td>
                        <td data-title="响应速度">0.8秒</td>
                        <td data-title="最后验证时间">2019-06-17 11:31:01</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">47.100.21.174</td>
                        <td data-title="PORT">8118</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">上海市上海市  阿里云</td>
                        <td data-title="响应速度">3秒</td>
                        <td data-title="最后验证时间">2019-06-17 10:31:00</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">27.188.64.70</td>
                        <td data-title="PORT">8060</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">河北省邯郸市  电信</td>
                        <td data-title="响应速度">1秒</td>
                        <td data-title="最后验证时间">2019-06-17 09:31:01</td>
                    </tr>
    
                    <tr>
                        <td data-title="IP">139.217.233.32</td>
                        <td data-title="PORT">8118</td>
                        <td data-title="匿名度">高匿名</td>
                        <td data-title="类型">HTTP</td>
                        <td data-title="位置">北京市海淀区 微软(中国)有限公司 BGP多线</td>
                        <td data-title="响应速度">3秒</td>
                        <td data-title="最后验证时间">2019-06-17 08:31:01</td>
                    </tr>
    
                </tbody>
            </table>
    re:
         <td data-title="IP">(.*?)</td>.*? <td data-title="PORT">(.*?)</td>
    
    '''
    import requests
    import re
    import time
    HEADERS = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36',
    }
    def  get_index(url):
        time.sleep(1)
        response = requests.get(url, headers=HEADERS)
        return response
    def parse_index(text):
        ip_list = re.findall('<td data-title="IP">(.*?)</td>.*? <td data-title="PORT">(.*?)</td>', text, re.S)
        for ip_port in ip_list:
            ip = ':'.join(ip_port)
            yield ip
    def test_ip(ip):
        print('测试ip: %s' % ip)
        try:
            proxies = {
                'https': ip
            }
            # ip测试网站
            ip_url = 'https://www.ipip.net/'
            # 使用有效与无效的代理对ip测试站点进行访问,若返回的结果为200则代表当前测试ip正常
            response = requests.get(ip_url, headers=HEADERS, proxies=proxies, timeout=1)
            if response.status_code == 200:
                return ip
        # 若ip代理无效则抛出异常
        except Exception as e:
            print(e)
    # 使用代理爬取nba
    def spider_nba(good_ip):
        url = 'https://china.nba.com/'
        proxies = {
            'https': good_ip
        }
        response = requests.get(url, headers=HEADERS, proxies=proxies)
        print(response.status_code)
        print(response.text)
    if __name__ == '__main__':
        base_url = 'https://www.kuaidaili.com/free/inha/{}/'
        for line in range(0, 2904):
            ip_url = base_url.format(line)
            response = get_index(ip_url)
            ip_list = parse_index(response.text)
            for ip in ip_list:
                # print(ip)
                good_ip = test_ip(ip)
                if good_ip:
                    # 真是代理,开始测试
                    spider_nba(good_ip)
  • 相关阅读:
    快捷JS PHP
    css userAgent (简易浏览器区分) PHP
    http://fw.qq.com/ipaddress PHP
    JS竖排文字 PHP
    奇怪的body PHP
    使用36进制,无损压缩GUID到26位 PHP
    链接<a>执行JS PHP
    纯JS省市区三级联动 PHP
    Table 样式 PHP
    Exceeded storage allocation. The server response was: 4.3.1 Message size exceeds fixed maximum message size
  • 原文地址:https://www.cnblogs.com/lhhhha/p/11048516.html
Copyright © 2020-2023  润新知