【Python爬虫_7】爬取免费代理IP并验证是否可用(西刺代理)

import requests
from lxml import etree
import pymysql

'''
爬取西刺代理ip和port,然后验证该ip是否可用
'''

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}


def parse_data(url):

    # 开启数据库
    conn = pymysql.Connect(
        host='127.0.0.1', port=3306, db='pyproject', user='root', passwd='root', charset='utf8'
    )
    curr = conn.cursor()

    all_ip = []     # 保存可用的ip和port
    response = requests.get(url, headers=header)
    data = response.content.decode('utf-8')
    html = etree.HTML(data)
    all_list = html.xpath('//table[@id="ip_list"]//tr')
    for t in all_list[2:]:
        ip = t.xpath('./td[2]/text()')[0]
        port = t.xpath('./td[3]/text()')[0]
        sql = "insert into XCIP(ip, port) values('" + ip + "','" + port + "')"
        list_data = ip + ':' + port

        # 验证ip是否有效
        tarurl = 'http://www.baidu.com'
        proxies = {'http': 'http://' + list_data, 'https': 'https://' + list_data}
        try:
            res = requests.get(url=tarurl, proxies=proxies, headers=header, timeout=5).status_code
            if res == 200:
                print(list_data)
                curr.execute(sql)
                conn.commit()
                all_ip.append(list_data)
        except:
            print('该ip不可用')

    curr.close()
    conn.close()
    return all_ip


def main():
    base_url = 'https://www.xicidaili.com/nn/{}'
    for i in range(1, 5):
        url = base_url.format(i)
        detail_url = parse_data(url)


if __name__ == '__main__':
    main()

 

 

爬取了前五页,就只有7个可用,这个网页太不靠谱了;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值