zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python原来如此美丽|Request & Parsel

2023-03-14 22:48:14 时间

学习Python的Request与Parsel模块今天分享一个爬取代理节点的小脚本,我们在使用爬虫的时候,可以通过设置一些代理避免(或者尽可能避免)我们的服务器IP被封掉,可是这些代理从哪里来呢?

这里分享一个获取代理数据的脚本。至于设置Proxy的原理,大家可以自己查阅。动手干起来...

准备爬虫脚本

安装依赖包

# -*- coding: utf-8 -*-
"""
File Name:       main
Description :
Author :         Xuexiaobai
date:            2020-02-20
Change Activity: 2020-02-20
IDE:             PyCharm
"""
import requests,parsel

basePage= "https://www.kuaidaili.com/free/inha/"
firstPage="https://www.kuaidaili.com/free/inha/1/"

def RequestHandler(url):
    content = requests.get(url, headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'})
    if content.status_code != 200:
        return ""
    else:
        return content.text

def GetElementSelectorObj(htmlData, extractRule,isSelector):
    htmlData = parsel.Selector(htmlData)
    if isSelector:
        return htmlData.xpath(extractRule)
    else:
        return htmlData.xpath(extractRule).extract()

def CheckIp(proxylist):
    can_use=[]
    for proxy in proxylist:
        try:
            requests.get('https://www.baidu.com',
                         headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'},
                         proxies=proxy,
                         timeout=0.1)
            can_use.append(proxy)
        except Exception as e:
            print(e)
    return can_use

proxyList = []
for i in range(1,1000,1):
    baseurl=basePage+str(i)
    for proxy_line in GetElementSelectorObj(RequestHandler(firstPage),'//table[@class="table table-bordered table-striped"]/tbody/tr', True):
        proxies = {}
        httpSchema = proxy_line.xpath('./td[4]/text()').extract_first()
        proxyAddr = proxy_line.xpath('./td[1]/text()').extract_first()
        proxyPort = proxy_line.xpath('./td[2]/text()').extract_first()
        proxies[httpSchema] = proxyAddr + ":" + proxyPort
        proxyList.append(proxies)
    print("【快代理】正在检查第{0}页代理,有{1}个代理可以使用.".format(i,len(CheckIp(proxyList))))
    proxyList=[] # 清空列表

运行脚本

source $(PWD)/venv/bin/activate
nohup python main.py

查看日志

刚开始的时候,可用率还是很高的,不信你可以试试...

【快代理】正在检查第1页代理,有15个代理可以使用.
【快代理】正在检查第2页代理,有0个代理可以使用.
【快代理】正在检查第3页代理,有0个代理可以使用.
【快代理】正在检查第4页代理,有0个代理可以使用.
【快代理】正在检查第5页代理,有0个代理可以使用.
【快代理】正在检查第6页代理,有0个代理可以使用.
【快代理】正在检查第7页代理,有0个代理可以使用.
【快代理】正在检查第8页代理,有15个代理可以使用.
...

是不是看着很简单,但是对于小白来说,知识点还是不少的,简单的总结一下:

  • 温习了一下代理基本原理和requests包proxy的使用方法
  • 学习了一下Parsel如何通过XPATH获取HTML元素
  • 得到一个免费代理服务地址的网站(哈哈)