欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬取代理IP并進行有效的IP測試實現(xiàn)

 更新時間:2020年10月09日 10:33:29   作者:Jack-yuan  
這篇文章主要介紹了python爬取代理IP并進行有效的IP測試實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

爬取代理IP及測試是否可用

很多人在爬蟲時為了防止被封IP,所以就會去各大網(wǎng)站上查找免費的代理IP,由于不是每個IP地址都是有效的,如果要進去一個一個比對的話效率太低了,我也遇到了這種情況,所以就直接嘗試了一下去網(wǎng)站爬取免費的代理IP,并且逐一的測試,最后將有效的IP進行返回。

在這里我選擇的是89免費代理IP網(wǎng)站進行爬取,并且每一個IP都進行比對測試,最后會將可用的IP進行另存放為一個列表

https://www.89ip.cn/

在這里插入圖片描述

一、準備工作

導(dǎo)入包并且設(shè)置頭標簽

import requests
from bs4 import BeautifulSoup

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

二、提取網(wǎng)頁源碼

提取網(wǎng)頁源碼返回的是整個網(wǎng)站的HTML

def getHtml(url):
  try:
    reponse = requests.get(url, headers=header)
    reponse.raise_for_status()
    reponse.encoding = reponse.apparent_encoding
    return reponse.text
  except:
    return "網(wǎng)頁源碼提取錯誤"

三、解析HTML并提取IP

函數(shù)傳入的參數(shù)是HTML和存放IP地址的列表

# 解析網(wǎng)頁,提取IP
def getIp(html, list):
  try:
    soup = BeautifulSoup(html, "html.parser")
    tr = soup.find("tbody").find_all_next("tr")
    for ip in tr:
      # 提取IP
      td = ip.find_next("td").string
      td = str(td).replace(" ", "").replace("\n", "").replace("\t", "")
      # 提取端口號
      dk = ip.find_all_next("td")[1].string
      dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "")
      # 將IP和端口號進行連接
      ip = td + ":" + dk
      list.append(ip) # 再進IP地址存放至指定列表中去
  except:
    print("獲取IP失敗")

四、測試IP是否可用

在這里測試IP的原理是用requests請求百度網(wǎng)站,并且傳入代理IP,如果網(wǎng)站返回狀態(tài)碼為200那么說明此IP有效,如果出現(xiàn)其他情況則判斷IP地址無效

# 測試出可用IP
def ip_text(list, valid_IP):
  try:
    url = "https://www.baidu.com//"
    for ip in list:
      try:
        rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5)
        if rep.status_code == 200: # 如果放回的狀態(tài)碼是200,那么說明該IP地址可用
          valid_IP.append(ip)
          print("該代理IP有效:" + ip)
        else:
          print("該代理IP無效:" + ip)
      except:
        print("該代理IP無效:" + ip)
  except:
    print("IP測試失敗")

五、主函數(shù)main

主函數(shù)中主要負責調(diào)用函數(shù)和自定義頁數(shù)指定生成URL,并且在程序結(jié)束前會輸出有效IP地址

if __name__ == '__main__':

  valid_IP = [] # 有效IP地址
  for i in range(1, 90): # 可自定義頁數(shù)
    ip_list = [] # 存放所有爬取到的ip
    url = "https://www.89ip.cn/index_" + str(i) + ".html"
    print(url)
    html = getHtml(url)
    getIp(html, ip_list)
    ip_text(ip_list, valid_IP)

  print("=" * 30)
  print("測試完成,有效IP如下:")
  print("-" * 30)
  for a in valid_IP:
    print(a)
  print("=" * 30)

代碼整體框架已經(jīng)結(jié)束完畢了,最后把所有代碼呈現(xiàn)出了

完整代碼

# -*- coding: utf-8 -*-
# Author : YRH
# Data : 2020/10/07
# Project : 爬取代理IP并且測試可用IP
# Tool : PyCharm

import requests
from bs4 import BeautifulSoup

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


# 提取網(wǎng)頁源碼
def getHtml(url):
  try:
    reponse = requests.get(url, headers=header)
    reponse.raise_for_status()
    reponse.encoding = reponse.apparent_encoding
    return reponse.text
  except:
    return "網(wǎng)頁源碼提取錯誤"


# 解析網(wǎng)頁,提取IP
def getIp(html, list):
  try:
    soup = BeautifulSoup(html, "html.parser")
    tr = soup.find("tbody").find_all_next("tr")
    for ip in tr:
      # 提取IP
      td = ip.find_next("td").string
      td = str(td).replace(" ", "").replace("\n", "").replace("\t", "")
      # 提取端口號
      dk = ip.find_all_next("td")[1].string
      dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "")
      # 將IP和端口號進行連接
      ip = td + ":" + dk
      list.append(ip) # 再進IP地址存放至指定列表中去
  except:
    print("獲取IP失敗")


# 測試出可用IP
def ip_text(list, valid_IP):
  try:
    url = "https://www.baidu.com//"
    for ip in list:
      try:
        rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5)
        if rep.status_code == 200: # 如果放回的狀態(tài)碼是200,那么說明該IP地址可用
          valid_IP.append(ip)
          print("該代理IP有效:" + ip)
        else:
          print("該代理IP無效:" + ip)
      except:
        print("該代理IP無效:" + ip)
  except:
    print("IP測試失敗")


if __name__ == '__main__':

  valid_IP = [] # 有效IP地址
  for i in range(1, 90): # 可自定義頁數(shù)
    ip_list = [] # 存放所有爬取到的ip
    url = "https://www.89ip.cn/index_" + str(i) + ".html"
    print(url)
    html = getHtml(url)
    getIp(html, ip_list)
    ip_text(ip_list, valid_IP)

  print("=" * 30)
  print("測試完成,有效IP如下:")
  print("-" * 30)
  for a in valid_IP:
    print(a)
  print("=" * 30)

到此這篇關(guān)于python爬取代理IP并進行有效的IP測試實現(xiàn)的文章就介紹到這了,更多相關(guān)python爬取代理IP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django中賬號密碼驗證登陸功能的實現(xiàn)方法

    django中賬號密碼驗證登陸功能的實現(xiàn)方法

    這篇文章主要介紹了django中賬號密碼驗證登陸功能的實現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 深入分析Python中Lambda函數(shù)的用法

    深入分析Python中Lambda函數(shù)的用法

    lambda函數(shù)是Python中常用的內(nèi)置函數(shù),又稱為匿名函數(shù)。和普通函數(shù)相比,它只有函數(shù)體,省略了def和return,使得結(jié)構(gòu)看起來更精簡。本文將詳細說說Lambda函數(shù)的用法,需要的可以參考一下
    2022-12-12
  • python——全排列數(shù)的生成方式

    python——全排列數(shù)的生成方式

    今天小編就為大家分享一篇python——全排列數(shù)的生成方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 詳解Python3序列賦值、序列解包

    詳解Python3序列賦值、序列解包

    這篇文章主要介紹了Python3序列賦值、序列解包的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python實現(xiàn)動態(tài)給類和對象添加屬性和方法操作示例

    Python實現(xiàn)動態(tài)給類和對象添加屬性和方法操作示例

    這篇文章主要介紹了Python實現(xiàn)動態(tài)給類和對象添加屬性和方法操作,涉及Python面向?qū)ο蟪绦蛟O(shè)計中類與對象屬性、方法的動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • 使用python讀取csv文件快速插入數(shù)據(jù)庫的實例

    使用python讀取csv文件快速插入數(shù)據(jù)庫的實例

    今天小編就為大家分享一篇使用python讀取csv文件快速插入數(shù)據(jù)庫的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python如何快速拼接字符串

    python如何快速拼接字符串

    這篇文章主要介紹了python如何快速拼接字符串,幫助大家理解和學習python,感興趣的朋友可以了解下
    2020-10-10
  • python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法

    python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法

    這篇文章主要介紹了python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python操作xlwings的實例詳解

    Python操作xlwings的實例詳解

    python操作Excel的模塊,網(wǎng)上提到的模塊大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等。本文將通過幾個實例演示下xlwings的使用,感興趣的可以了解一下
    2022-07-07
  • 使用Python?Pathlib模塊一站式解決文件路徑難題

    使用Python?Pathlib模塊一站式解決文件路徑難題

    在本文中,將詳細介紹pathlib模塊,包括如何創(chuàng)建路徑、檢查文件和目錄的存在、遍歷目錄、執(zhí)行文件操作等,此外,還將提供豐富的示例代碼來演示如何使用pathlib模塊來處理文件和目錄
    2023-11-11

最新評論