爬取快代理免费代理是否可用

  判断代理是否可用的核心在于requestsproxiestimeout两个参数。

from pyquery import PyQuery as pq
import requests

headers = {'User_Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/79.0.3945.117 Safari/537.36',
           'Cookie': 'channelid=0; sid=1579167120733110; _ga=GA1.2.617590803.1579168440; '
                     '_gid=GA1.2.1767454781.1579168440; Hm_lvt_7ed65b1cc4b810e9fd37959c9bb51b31=1579168440; '
                     'Hm_lpvt_7ed65b1cc4b810e9fd37959c9bb51b31=1579168440'}

proxy = {}
availables = []
not_availables = []


def get_proxies(url):
    html = requests.get(url, headers=headers)
    if html.status_code == 200:
        doc = pq(html.text)
        items = doc('table tbody tr').items()
        for item in items:
            proxy['http'] = '{}://{}:{}'.format(item.find('td[data-title=类型]').text().lower(),
                                                item.find('td[data-title=IP]').text(),
                                                item.find('td[data-title=PORT]').text())
            proxy['https'] = '{}://{}:{}'.format(item.find('td[data-title=类型]').text().lower(),
                                                 item.find('td[data-title=IP]').text(),
                                                 item.find('td[data-title=PORT]').text())
            is_available()


def is_available():
    try:
        requests.get(url='https://www.kuaidaili.com/free/inha/1/', headers=headers, proxies=proxy, timeout=3)
        availables.append(proxy.copy())
    except requests.RequestException:
        not_availables.append(proxy.copy())


if __name__ == '__main__':
    pages = 100
    for page in range(pages):
        print('正在爬取第{}页'.format(page + 1))
        url = 'https://www.kuaidaili.com/free/inha/{}/'.format(page + 1)
        get_proxies(url)
    with open('可用代理.txt', 'w') as f:
        for available in availables:
            f.write(available['http'])
            f.write('\n')
    with open('不可用代理.txt', 'w') as f:
        for not_available in not_availables:
            f.write(not_available['http'])
            f.write('\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值