吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5736|回复: 15
收起左侧

[学习记录] 【笔记】python自学笔记(爬虫篇)——添加代{过}{滤}理

  [复制链接]
qianshang666 发表于 2021-2-21 23:33
一.前言
兄弟们好,因为这几天都在学习深度学习,所以也是好几天没更新了,心里也是十分的愧疚,所以今天来给大家更新了(其实完全就是今天才想起来),今天给大家讲的就是添加代{过}{滤}理,让你做爬虫不至于一直都用一个IP来,而且教一下大家如何构建一个属于自己的代{过}{滤}理池,不换IP,极易被有反扒的网站封锁,所以这节很重要

二.首先我们要找到一个有很多免费代{过}{滤}理的网站,免费IP大多都是费的,不能用,但是我们作为白嫖党,我们就要从石头里面捡鸡蛋皮,我们筛选一下这些免费IP,然后我们自己存起来,当作自己的代{过}{滤}理池,然后使用它,有钱的话买个优质代{过}{滤}理也是可以的,下图就是免费代{过}{滤}理,我们要做的就是提取IP那一部分,这就要用到我们之前学过的知识了
免费代{过}{滤}理.png


三.用爬虫提取出免费IP
1.我们先拉到最下面,抓取一下它翻页的包,因为他有很多页呀,我们要筛选可以用的IP当然要越多越好啦,很明显呀,我们这个2就是页数的意思
刷新网页.png
2.先按照我这三步走,找到IP和端口的所在的地方,接下来我们分析一下,直接用td定位的话不好实现,因为我们只需要IP和PORT,接下来我给大家一种新的思路
DOM语法树.png
3.正常的css语法表达式应该是:#list .table tbody tr td(在这里顺便复习一下之前说过的CSS写法,id用#,class用点.,剩下的用空格,因为id是唯一的,所以可以先找id,然后一步一步向下找),但这样我们找到的数据就太多了,我们就先用tr定位,然后取出列表,再根据列表索引取出IP和PORT,接下来我展示一下这部分代码,方便大家理解
[Python] 纯文本查看 复制代码
import requests
from bs4 import BeautifulSoup
import time

finally_IPs = []    #创建一个存放我们处理好的IP(36.250.156.241:9999这种格式)
for i in range(1,10):    #这个是我们代表页数的一个循环,也就是这里我们爬取99页(1-99)
    url = f'https://www.kuaidaili.com/free/inha/{i}/'    #这个是f字符串,就是在字符串之前加f,就可以在后面用{}替换一些变量
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36'
    }
    html = requests.get(url = url,headers = headers)    #访问网页
    #print(html.text)    #输出网页源代码
    soup = BeautifulSoup(html.text,'lxml')    #第一个参数放网页文本,第二个参数是lxml解析器
    results = soup.select('#list .table tbody tr')    #css语句放在引号中间,这样就能先取出tr
    
    for result in results:
        #print(result)
        IP = result.select('td')[0].text    #二次提取数据,定位td,取出第0个元素
        print(IP)
        PORT = result.select('td')[1].text    #和上面同理,定位td,取出第一个元素
        print(PORT)
        finally_IP = IP + ':' + PORT
        print(finally_IP)
        finally_IPs.append(finally_IP)    #给列表添加元素,一一添加进去
    
    time.sleep(3)    #太快会取不到,所以这里我们加3秒的延迟,这个需要导入time库,自带库
print(finally_IPs)     #我们循环结束后,输出一下列表看看

结果图我们看一下
IP列表.png
4.接下来就是验证可用性了,我们先介绍一个proxies参数,有 http 与 https 两种,在爬取不同网站时我们需要选用不同类型的网站时选用不同的 proxise,在不知道网站类型时可以将两种类型均放进去,requests 会自动选择合适的。
[Python] 纯文本查看 复制代码
for finally_IP in finally_IPs:    #ip列表一一遍历
    proxies = {
    'http':'http://' + finally_IP,
    'https':'https://' + finally_IP
    }
    try:
        response = requests.get(url = 'http://www.baidu.com', headers = headers, proxies = proxies, timeout = 3)
        #上面timeout是参数,表示如果三秒没有响应的话,我们就报错
        if response.status_code == 200:   #如果状态码为200,也就是正常访问的话就代表是可用IP
            with open('Available.txt','w',encoding='utf_8_sig') as fp:
                fp.write(finally_IP + '\n')
            #上面两句是将可用IP存入本地
            print("这是一个可用IP,已保存到本地")
        else:
            print("这是一个不可用IP")
    except:
        print("这是一个不可用IP")



四.这样就算写好了,但是我替大家试了10页,一个能用的都没,我心态都崩了,不过这个也是在意料之中,这个只是让大家了解这个过程,我还是建议大家买优质代{过}{滤}理,使用API调用,我把这个通用的代码也发出来给兄弟们看看
[Python] 纯文本查看 复制代码
import requests

def verify(proxy_IP):
    print('proxy_IP:',proxy_IP)
    proxy_IP = proxy_IP.strip().replace(' ','')
    print('new_proxy_IP:',proxy_IP)
    url = 'http://www.baidu.com/s?wd=python'
    headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36'
    }
    proxies = {
        'http':'http://' + proxy_IP,
        'https':'https://' + proxy_IP
    }
    html = requests.get(url = url,headers = headers,proxies = proxies)
    print(html.text)

def IP():
    api_url = requests.get('').text   #引号中间加上代{过}{滤}理的API地址
    api_url = api_url.replace('\n','')
    print("获取到的IP为:",api_url)
    return api_url

if __name__ =='__main__':
    proxy_IP = IP()
    verify(proxy_IP)


大家只需要把19行的API填写,然后从15,16行开始改成你的爬虫代码就行,这个我自定义了子程序,这样看起来简介点,没写注释,但是估计大家这么久了,理解起来也是轻轻松松

后言:大家有问题可以在评论问我,我会尽我最大的努力给大家解答,感谢你的观看

免费评分

参与人数 4吾爱币 +5 热心值 +2 收起 理由
IsMe9666 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wuaiwxh + 1 我很赞同!
奕余君 + 1 + 1 对我这种初学者帮助很大,感谢!!
王星星 + 2 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

低调做人呀呀呀 发表于 2021-2-21 23:39
谢谢分享 等之后学习py的时候 有不懂的地方希望大佬不吝赐教哦
 楼主| qianshang666 发表于 2021-2-21 23:41
低调做人呀呀呀 发表于 2021-2-21 23:39
谢谢分享 等之后学习py的时候 有不懂的地方希望大佬不吝赐教哦

互相交流,绝对知无不言,言无不尽
qqookkkk 发表于 2021-2-22 01:55
大佬你有foot-parent吗,有的私发我一个,看到你发的文章想学习,但不懂怎么操作
windtrace 发表于 2021-2-22 08:23
建议异步或多线程,requests效果太低
 楼主| qianshang666 发表于 2021-2-22 08:26
windtrace 发表于 2021-2-22 08:23
建议异步或多线程,requests效果太低

多线程后面会讲的
anky 发表于 2021-2-22 08:36
挺详细的,都在学编程,厉害
晓风残月祭 发表于 2021-2-22 08:44
厉害了!
 楼主| qianshang666 发表于 2021-2-22 09:03
qqookkkk 发表于 2021-2-22 01:55
大佬你有foot-parent吗,有的私发我一个,看到你发的文章想学习,但不懂怎么操作

这个我没
chooper 发表于 2021-2-22 09:20
真实用,马克了,期待多线程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 06:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表