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)
原文地址:https://www.cnblogs.com/lhhhha/p/11048516.html