python 抓取 快代理-国内普通代理 IP

python 抓取 快代理-国内普通代理 IP

简介

  1. 抓取快代理-国内普通代理栏目;
  2. 默认抓取所有的数据,从第一页到最后一页;
  3. 抓取关键词: ip port;
  4. 时间间隔默认:2s,时间太短会导致抓取失败;

创建一个kuaiDaiLiGeneral.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
import time
import requests
from bs4 import BeautifulSoup


class KuaiDaiLiGeneral(object):
    def __init__(self):
        self.session = requests.session()
        self.proxies = None
        self.timeout = 10
        self.time_interval = 2
        self.headers = {
            "Accept": "text/html,application/xhtml+xml,"
                      "application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, sdch, br",
            "Accept-Language": "zh-CN,zh;q=0.8",
            "Connection": "Keep-Alive",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/55.0.2883.87 Safari/537.36",
        }

    def get_status(self, url):
        """
        获取状态
        :param url: 访问地址
        :return: 返回response或False
        """
        response = self.session.get(
            url=url,
            headers=self.headers,
            proxies=self.proxies,
            timeout=self.timeout,
            # verify=False,
            # allow_redirects=False
        )
        if response.status_code == 200:
            return response
        else:
            print("ERROR: 网络连接失败! status: %s url: %s" % (response.status_code, url))
            print(response.text)
            return False

    def get_index(self, url):
        """
        访问首页,建立连接
        :param url:
        :return:
        """
        response = self.get_status(url)
        if response:
            # response.encoding = "utf-8"
            # html = response.text
            # print(html)
            print("首页,建立连接...")
            return True

    def get_last_page(self, url):
        """
        获取最后一页page
        :param url: 第一页的url
        :return: 返回int(last_page)或None
        """
        response = self.get_status(url)
        if not response:
            return None
        html = response.text
        soup = BeautifulSoup(html, "html5lib")
        lis = soup.select("#listnav > ul > li")

        if lis[-1].text == "页":
            last_page = lis[-2].find("a").text

            return int(last_page)
        return None

    def parse_html(self, url):
        response = self.get_status(url)
        if not response:
            return None
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        items = soup.find(id="list").find("tbody").find_all("tr")
        ip_port_list = []
        for item in items:
            ip = item.find(attrs={"data-title": "IP"}).text
            port = item.find(attrs={"data-title": "PORT"}).text
            ip_port = ip + ":" + port + "\n"
            ip_port_list.append(ip_port)

        return ip_port_list

    @staticmethod
    def write_to_text(path, content):
        path = os.path.abspath(path)
        with open(path, 'a+', encoding='utf-8') as f:
            f.writelines(content)

    def next_page(self, last_page):
        for i in range(1, last_page + 1):
            time.sleep(self.time_interval)
            url = "https://www.kuaidaili.com/free/intr/{i}".format(i=i)
            print(url)
            ip_port_list = self.parse_html(url)
            path = os.path.join(os.getcwd(), "IP.txt")
            self.write_to_text(path, ip_port_list)

    def main(self):
        # 首页
        url = "https://www.kuaidaili.com"
        if not self.get_index(url):
            return None

        time.sleep(self.time_interval)

        # 获取最后一页
        url = "https://www.kuaidaili.com/free/intr/1/"
        last_page = self.get_last_page(url)
        if not last_page:
            return None

        # 翻页
        self.next_page(last_page)


if __name__ == '__main__':
    kuai_dai_li = KuaiDaiLiGeneral()
    kuai_dai_li.main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫代理IP代理是一种在使用Python爬虫时,通过使用代理IP来隐藏真实的IP地址,以防止被目标网站封禁或限制访问。这样可以有效地绕过网站的反爬取技术,并且可以实现高强度、高效率地爬取网页信息而不给网站服务器带来过大的压力。 为了实现代理IP代理,可以按照以下步骤进行操作: 1. 首先,需要获取稳定的代理IP列表。可以参考相关博客或网站,如《python爬虫设置代理ip池——方法(二)》,从中购买或获取代理IP。 2. 接下来,在Python代码中调用代理IP。可以使用以下代码获取代理IP列表并随机选择一个IP作为代理: ```python if __name__ == '__main__': url = 'http://www.xicidaili.com/nn/' ip_list = get_ip_list(url) proxies = get_random_ip(ip_list) print(proxies) ``` 其中,`get_ip_list()`函数用于获取代理IP列表,`get_random_ip()`函数用于从列表中随机选择一个IP作为代理。 通过以上步骤,就可以使用代理IP实现Python爬虫的代理IP代理功能了。这样可以有效地绕过网站的反爬取技术,并且提高爬取效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python爬虫设置代理ip池——方法(一)](https://blog.csdn.net/weixin_40372371/article/details/80154707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值