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

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

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

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

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

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

https://www.89ip.cn/

在這里插入圖片描述

一、準(zhǔn)備工作

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

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和端口號進(jìn)行連接
      ip = td + ":" + dk
      list.append(ip) # 再進(jìn)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ù)中主要負(fù)責(zé)調(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和端口號進(jìn)行連接
      ip = td + ":" + dk
      list.append(ip) # 再進(jìn)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并進(jìn)行有效的IP測試實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python爬取代理IP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論