1. 程式人生 > >Python3 requests爬取代理IP並驗證可用性(附多執行緒模式)

Python3 requests爬取代理IP並驗證可用性(附多執行緒模式)

簡要介紹:

使用python3 環境,需要自己安裝的包有requests  (網址請求,獲取頁面資訊)和  Lxml(頁面解析,資訊提取) 。

首先確定從何處獲取 “IP”,本人此次爬取的是 西刺網的免費IP代理。

大概流程:

  1.  請求有免費IP的網址(本次使用“http://www.xicidaili.com/nn/”)
  2.  獲取網址的頁面資訊
  3.  從已經獲得的頁面資訊中,提取有用的資料(關於代理IP的)。
  4.  對爬取的IP資料進行篩選,驗證IP 的是否可用(**西刺網上的免費IP並不是全部一定可用**)
  5.  將有用的IP資訊(IP地址及埠號)進行儲存,寫入文
import requests
from lxml import etree

#代理IP的資訊儲存
def write_proxy(proxies):
    print(proxies)
    for proxy in proxies:
        with open("ip_proxy.txt", 'a+') as f:
            print("正在寫入:", proxy)
            f.write(proxy + '\n')
    print("錄入完成!!!")



#解析網頁,並得到網頁中的代理IP
def get_proxy(html):
    #對獲取的頁面進行解析
    selector = etree.HTML(html)
    #print(selector.xpath("//title/text()"))
    proxies = []
    #資訊提取
    for each in selector.xpath("//tr[@class='odd']"):
        #ip.append(each[0])
        ip = each.xpath("./td[2]/text()")[0]
        port = each.xpath("./td[3]/text()")[0]
        proxy = ip + ":" + port

        proxies.append(proxy)
    print(len(proxies))
    test_proxies(proxies)



#驗證已得到IP的可用性,本段程式碼通過訪問百度網址,返回的response狀態碼判斷(是否可用)。
def test_proxies(proxies):
    proxies = proxies
    url= "http://www.baidu.com/"
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    }
    normal_proxies=[]
    count = 1
    for proxy in proxies:
        print("第%s個。。" % count)
        count+=1
        try:
            response=requests.get(url,headers=header,proxies= {"http":proxy},timeout= 1)
            if response.status_code == 200:
                print("該代理IP可用:",proxy)
                normal_proxies.append(proxy)
            else:
                print("該代理IP不可用:",proxy)
        except Exception:
            print("該代理IP無效:", proxy)
            pass
    #print(normal_proxies)
    write_proxy(normal_proxies)


def get_html(url):
    header = {
        "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    }
    response = requests.get(
        url,
        headers=header,
    )
    #print(response.text)
    get_proxy(response.text)


if __name__ == "__main__":

    url = "http://www.xicidaili.com/nn/"
    get_html(url)

多執行緒模式:

           因為驗證IP是否可用,程式是序列(故此只能驗證一個結束後,才進行驗證下一個,**效率極低**。)

流程還是同上。

import requests
import threading
from lxml import etree



#解析網頁,並得到網頁中的IP代理
def get_proxy(html):
    selector = etree.HTML(html)
    #print(selector.xpath("//title/text()"))
    proxies = []

    for each in selector.xpath("//tr[@class='odd']"):
        #ip.append(each[0])
        ip = each.xpath("./td[2]/text()")[0]
        port = each.xpath("./td[3]/text()")[0]
        #拼接IP地址,埠號
        proxy = ip + ":" + port
        proxies.append(proxy)
    print(len(proxies))
    test_proxies(proxies)


def thread_write_proxy(proxy):
    with open("./ip_proxy.txt", 'a+') as f:
        print("正在寫入:", proxy)
        f.write(proxy + '\n')
        print("錄入完成!!!")


#新增執行緒模式
def thread_test_proxy(proxy):
    url = "http://www.baidu.com/"
    header = {
        "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    }
    try:
        response = requests.get(
            url, headers=header, proxies={"http": proxy}, timeout=1)
        if response.status_code == 200:
            print("該代理IP可用:", proxy)
            #normal_proxies.append(proxy)
            thread_write_proxy(proxy)
        else:
            print("該代理IP不可用:", proxy)
    except Exception:
        print("該代理IP無效:", proxy)
        pass



#驗證已得到IP的可用性
def test_proxies(proxies):
    proxies = proxies
    #print("test_proxies函式開始執行。。。\n", proxies)
    for proxy in proxies:
        test = threading.Thread(target=thread_test_proxy, args=(proxy, ))
        test.start()



def get_html(url):
    header = {
        "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    }
    response = requests.get(
        url,
        headers=header,
    )
    #print(response.text)
    get_proxy(response.text)


if __name__ == "__main__":

    url = "http://www.xicidaili.com/nn/"
    get_html(url)

相關推薦

Python3 requests代理IP驗證可用執行模式

簡要介紹: 使用python3 環境,需要自己安裝的包有requests  (網址請求,獲取頁面資訊)和  Lxml(頁面解析,資訊提取) 。 首先確定從何處獲取 “IP”,本人此次爬取的是 西刺網的免費IP代理。 大概流程:  請求有免費IP的網址(本次使用“htt

利用python爬蟲批量獲取代理IP驗證可用

# -*- coding: utf-8 -*- from bs4 import BeautifulSoup import urllib2 import httplib import threading import sys reload(sys) sys.setdefaultencoding('utf-8'

資料時?IP老被封?這樣就不會被封了!西刺代理IP驗證

胡蘿蔔醬最近在爬取知乎使用者資料,然而爬取不了一會,IP就被封了,所以去爬取了西刺代理IP來使用。       這裡爬取的是西刺國內高匿IP。我們需要的就是這一串數字。     進群:548377875&nbs

python3西刺網免費代理IP驗證是否可用

爬取西祠網免費高匿代理IP並驗證是否可用存到csv檔案 #匯入模組 import requests import chardet import random from scrapy.selector import Selecto

從西刺代理代理ip驗證是否可用

最近又重新拾起了久違的爬蟲,寫了一個代理ip的爬取,驗證和儲存器。 1.爬取網站是西刺代理,使用了requests+beautifulsoup庫 2.驗證的網站使用了京東和淘寶的首頁,用了urllib+beautifulsoup庫 3.將爬取後的程式碼存入本地的資料庫中,

Python代理IP

safari () get ons too user import tool com 環境Python3.6#!/usr/bin/env python #-*-coding=utf-8 -*- #AUTHOR:duwentao import requests impo

python爬蟲代理ip

  最近想玩玩代理IP的刷東西怎麼實現的,所以來試試(生計所迫) 這個是西刺免費代理IP http://www.xicidaili.com/ 不能保證都能用,所以爬取下來需要檢驗,用爬取的代理ip訪問網站,看狀態碼,是200就證明能用 儲存到MongoDB

為反反爬蟲,打造一個自己的IP池?Python獲取西刺代理IP驗證

  胡蘿蔔醬最近在爬取知乎使用者資料,然而爬取不了一會,IP就被封了,所以去爬取了西刺代理IP來使用。     這裡爬取的是西刺國內高匿IP。我們需要的就是這一串數字。       分

代理IP

現在爬蟲好難做啊,有些網站直接封IP,本人小白一個,還沒錢,只能找免費的代理IP,於是去爬了西刺免費代理,結果技術值太低,程式還沒除錯好, IP又被封了。。。 IP又被封了。。。 IP又被封了。。。 於是又開始找其他的免費代理,找到了89免費代理,這個網站提供了API介面。在我除錯過程中發現,這個API介

python3爬蟲 -----大學資訊通過matplotlib與numpy繪製結果-----from最好大學網

爬取大學資訊並 通過matplotlib與numpy繪製多指標柱形圖 就某一因素繪製餅圖並突出其中一個物件(本例中為江西理工大學) 1 # -*- coding:utf-8 -*- 2 # author:zxy 3 # date:2018-12-24 4 # upda

python3 爬蟲深圳公租房輪候庫深圳房網

深圳公租房輪候庫已經朝著幾十萬人的規模前進了,這是截至16年10月之前的資料了,貼上來大家體會下 所以17年已更新妥妥的10W+ 今天就拿這個作為爬蟲的練手專案  1、環境準備: 作業系統:win10 python版本:python3.5.3 開發工具:sublime 3 python需要安裝的庫:  

考研大資料與分析工具V0.0.0 發行日期2018.09.02

產品下載: 考研大資料爬取與分析工具V0.0.0(本版本爬取與分析研招網18年的13.82萬個招生詳情網頁無問題,後續19、20等的招生資料爬取工作我會跟進)下載地址: 考研大資料分析報表V0.0.0(基於研招網18年的13.82萬個招生詳情網頁,18年的180個學科

【DP】ssl 1010 方格執行DP

Description 設有N*N的方格圖(N<=10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示(見樣例):   某人從圖的左上角的A 點出發,可以向下行走,也可以向右走,直到到達右下角的B點。在走過的路上,他可以取走方格中的數(取走後的方格中將變

TCP/IP網路程式設計 基於Linux程式設計_4 --執行伺服器端的實現

執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大,因此我們才引入執行緒,我們可以把它看成是一種輕量級程序。它相比程序有如下幾個優點: 執行緒的建立和上下文切換開銷更小且速度更快。 執行緒間交換資料時無需特殊技術。 程序:在作業系統構成

無顯示器,無網線,無路由使用筆記本實現ssh遠端登入樹莓派3b+,登入遠端桌面OpenCV安裝教程推薦

新增前言: 這篇文章屬於此係列: 一個用樹莓派做的會聊天,能人臉識別(支援雲臺追蹤)和傳送郵件的小玩具 前言: 我正在做一個樹莓派(RaspberryPi)+人臉識別+語音識別的專案。人臉識別打算使用face_recognition這個為Python提供的庫;語音

python爬蟲建立代理池,5000個代理IP進行驗證

前面已經介紹了urllib+正則表示式和BeautifulSoup進行爬取資料的方法,今天再解決一個實際問題——構建自己的代理池。     通過爬蟲在網上進行資料的獲取,由於效率很快,換言之,訪問的速度過快,導致一段時間內的流量過大,會使得對方的伺服器壓力過

Python3網路爬蟲:requests+mongodb+wordcloud 豆瓣影評生成詞雲

Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一 前言 二 豆瓣網影評爬取 網頁分析 程式碼編寫 三 資料庫實裝 四

【爬蟲】002 python3 +beautifulsoup4 +requests 靜態頁面

bgcolor img err 預覽 政府 bold 技術 貴的 頁面元素 實驗環境: win7 python3.5 bs4 0.0.1 requests 2.19 實驗日期:2018-08-07 爬取網站:http://www.xhsd.cn/ 現在的網站大多有復雜

Python3.5+requests 網站遇到中文亂碼怎麼辦?ä½œè€…ï¼šå¾®è½¯äºšæ´²ç ”ç©¶é™¢

import requests from bs4 import BeautifulSoup url = 'http://quote.eastmoney.com/stocklist.html' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Wind

python3qq音樂下載 Python qqmusic音樂url批量下載

本文參考Python 爬取qqmusic音樂url並批量下載 同學找我爬取一下qq音樂播放連結,包括歌詞等資訊打包成json,試了一下可以爬取。 一、找到qq音樂播放的url 1.找到搜尋頁面返回的資料包 歌曲最終的播放連結時經過多次拼接的,首先找到qq音樂搜尋歌曲介面,https://y.qq.