qq1137 发表于 2020-8-21 23:00

python构造IP代{过}{滤}理池

这个是我在微信公众号看到类似案例,然后觉得蛮有用的。经常在爬虫的时候,因为IP访问频繁的原因导致爬取失败,所以根据这个思路写了IP代{过}{滤}理池。
新人写的代码还有很大的改善空间,希望各位大哥给点评论。

import requests
from bs4 import BeautifulSoup
import time

proxies_list = []


def download(response):
    global proxies_list
    soup = BeautifulSoup(response.text, "html.parser")
    # print("good")
    data_list = soup.find(name="div", attrs={"id": "freelist", "class": "kf-table"})
    data_list = data_list.find(name="tbody", attrs={"class": "center"})
    data_list = data_list.find_all(name="tr")
    # print(data_list)
    for data in data_list:
      ip = data.find(name="td", attrs={"data-title": "IP"}).text.strip()
      port = data.find(name="td", attrs={"data-title": "PORT"}).text.strip()
      http_type = data.find(name="td", attrs={"data-title": "类型"}).text.strip()
      # print(ip, http_type, port)
      ip_port = ip + ":" + port
      proxies_dict = {http_type: ip_port}
      proxies_list.append(proxies_dict)


def main():

    for i in range(1, 4):
      headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
      }
      url = "https://www.kuaidaili.com/ops/proxylist/" + str(i)
      try:
            response = requests.get(url=url, timeout=30, headers=headers)
            # print(response.text)
            # break
            if not response.raise_for_status():
                download(response)
      except:
            continue
    print(proxies_list)
    return proxies_list

qq1137 发表于 2020-8-22 11:10

好像忘了写注释了{:1_924:}

spiraea 发表于 2020-8-22 12:14

刚开始学习,先能实现自己需要的功能就好,慢慢从其他人的代码吸收改进

sdlyfxjjc 发表于 2020-8-22 16:38

刚开始学py ,还 看不懂, 先收藏了

PJ11210049 发表于 2020-8-22 17:29

支持下,多多分享,免费代{过}{滤}理能用的不多,都被用烂了

wanwfy 发表于 2020-8-23 01:28

崔庆才有个代{过}{滤}理池的项目可以看看!

bookaccount 发表于 2020-8-23 03:12

这只是收集了一批代{过}{滤}理地址,关键是如何自动切换代{过}{滤}理。我知道怎么用c#做,想看看python的写法

hxl123 发表于 2020-8-23 03:28

建议可以加入验证代{过}{滤}理的函数,可以用再返回,不然这样代{过}{滤}理很多会用不了,我自己也写了一个,你可以看一下,互相学习

bookaccount 发表于 2020-8-23 03:42

hxl123 发表于 2020-8-23 03:28
建议可以加入验证代{过}{滤}理的函数,可以用再返回,不然这样代{过}{滤}理很多会用不了,我自己也写了一个 ...

其实没有验证也可以。在爬虫时同样可以检测。

qq1137 发表于 2020-8-23 16:21

hxl123 发表于 2020-8-23 03:28
建议可以加入验证代{过}{滤}理的函数,可以用再返回,不然这样代{过}{滤}理很多会用不了,我自己也写了一个 ...

可以分享一下链接吗?好像这里不能看到个人资料。没有办法直接点进去
页: [1] 2
查看完整版本: python构造IP代{过}{滤}理池