[爬蟲練習]爬取同程安全應急響應公開漏洞列表以及詳情

来源:http://www.cnblogs.com/poacher/archive/2017/08/17/7384451.html
-Advertisement-
Play Games

附圖一張: 今天閑來無事做,就想起同程SRC有一個公開漏洞模塊。然而閑的蛋疼的我就有了對其寫一個爬蟲將漏洞列表爬下來的衝動。有兩個版本,一個是單線程的。另一個是多線程的版本。 單線程版本: 多線程版本: 多線程使用的是Threading+Queue #coding=utf-8 import requ ...


附圖一張:

  今天閑來無事做,就想起同程SRC有一個公開漏洞模塊。然而閑的蛋疼的我就有了對其寫一個爬蟲將漏洞列表爬下來的衝動。有兩個版本,一個是單線程的。另一個是多線程的版本。

單線程版本:

#coding=utf-8

import requests
import re
print "\033[0;31m "
print '''

●●●█〓█████████▅▄▄▄▄▄▄▄▃▃▃▃▄ ●●
▄██ 〓█★    ★█ 〓 ██▄
[ @Author:Poacher ]
▄▅██████████████████████▅▄▃
███████████████████████████◤
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙
'''
print "\033[0m"


bug_url = "http://sec.ly.com/bugs"

#首先獲取公開漏洞一共有多少頁。由於有url在href裡面。直接正則將url全部匹配出來之後開始迴圈請求。

page = requests.get(bug_url)
pattern = re.compile('<a class="ui button" href="(.*?)">',re.S)
page_text = re.findall(pattern,page.content)

# 去除重覆URL。
page_url = list(set(page_text))

# 定義函數開始獲取漏洞列表以及漏洞詳情
#獲取標題以及鏈接地址可以前提下需要獲取同一個a標簽里的。否則容易出現數據對不上的情況。
bugs_count = 0
for i in page_url:
    bugs_list = requests.get(i)
    bugs_list_pattern = re.compile('<a title="(.*?)".*? href="(.*?)">',re.S)
    bugs_list_content = re.findall(bugs_list_pattern,bugs_list.content)
    bugs_count = bugs_count + len(bugs_list_content)
    for bugs_list in bugs_list_content:

        # 將斜杠替換成空,避免創建文件的時候出現異常。
        bugs_title = bugs_list[0].replace('/','')
        bugs_content = requests.get("http://sec.ly.com/"+bugs_list[1])
        filename = "./bugs_list/" + str(bugs_title) + ".html"
        html = open(filename.decode('utf-8'), 'w')
        html.write(str(bugs_content.content))
        html.close()
        print "正在爬取:"+bugs_title

print "爬取完成。總共:"+ str(bugs_count) +"個漏洞。"

 

多線程版本: 多線程使用的是Threading+Queue
#coding=utf-8
import requests
import re
import threading
import time
import Queue

print "\033[0;31m "
print '''

●●●█〓█████████▅▄▄▄▄▄▄▄▃▃▃▃▄ ●●
▄██ 〓█★    ★█ 〓 ██▄
[ @Author:Poacher ]
▄▅██████████████████████▅▄▃
███████████████████████████◤
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙
'''
print "\033[0m"


bug_url = "http://sec.ly.com/bugs"
#首先獲取公開漏洞一共有多少頁。由於有url在href裡面。直接正則將url全部匹配出來之後開始迴圈請求。
page = requests.get(bug_url)
pattern = re.compile('<a class="ui button" href="(.*?)">',re.S)
page_text = re.findall(pattern,page.content)
# 去除重覆URL。
page_url = list(set(page_text))

class Spider_bugs(threading.Thread):

    def __init__(self,queue):
        threading.Thread.__init__(self)
        self._queue = queue

    def run(self):
        start_time = time.time()
        while not self._queue.empty():
            bugs_list = requests.get(self._queue.get())
            bugs_list_pattern = re.compile('<a title="(.*?)".*? href="(.*?)">',re.S)
            bugs_list_content = re.findall(bugs_list_pattern,bugs_list.content)
            for bugs_list in bugs_list_content:
                # 將斜杠替換成空,避免創建文件的時候出現異常。
                bugs_title = bugs_list[0].replace('/','')
                bugs_content = requests.get("http://sec.ly.com/"+bugs_list[1])
                filename = "./bugs_list/" + str(bugs_title) + ".html"
                html = open(filename.decode('utf-8'), 'w')
                html.write(str(bugs_content.content))
                html.close()
                print "正在爬取:"+bugs_title+" 耗時:"+str(time.strftime('%H:%M:%S'))

        print "總共耗時:"+str(time.time()-start_time)

def main():
    threads = []
    thread = 7 
    queue = Queue.Queue()

    for url in page_url:
        queue.put(url)

    for i in range(thread_count):
        threads.append(Spider_bugs(queue))

    for i in threads:
        i.start()

    for i in threads:
        i.join()


if __name__ == '__main__':
    main()

 

分享學習,如果以上代碼有什麼不應該的地方,請望指出。互相學習呀!!!還望有牛牛能優化下,然後在發一份學習學習!謝謝!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網站地址:http://m.3y.uu456.com/mbp_56hl91r1rx5uqa87qrzo_1.html ...
  • 之前就瞭解到了裝飾器, 但是就會點皮毛, 而且對其調用方式感到迷茫,正好現在的項目我想優化,就想到了用裝飾器, 因此深入研究了下裝飾器.先看下代碼: 我的疑惑就是明明return 的是一個函數名,按道理來講,返回的就是一個函數地址啊!我理解有問題?隨後上網查資料,又是閉包....但是我個人對它不感冒 ...
  • 簡介 RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。 安裝 首先安裝erlang環境。 官網:http://www.erlang.org/ Windows版下載地址:http://erlang.org/download/o... ...
  • 0x00: 首先聲明一個全局變數。 然後,在滑動處罰ajax請求的代碼處,做一個判斷。 if (control) { $('.get_more').click(); }; 這個地方是獲取數據的函數以及ajax請求的函數 0x01以上原理: 首先聲明一個全局變數設置為true,在觸發滑動時間的時候,判 ...
  • 使用過HttpServlet的都應該用過其doGet和doPost方法,接下來看看DispatcherServlet對這兩個方法的實現(源碼在DispatcherServlet的父類FrameworkServlet中): 方法里又將邏輯交由processRequest(request, respon ...
  • 題目描述 Copy從盧牛那裡聽說在一片叫yz的神的領域埋藏著不少寶藏,於是Copy來到了這個被劃分為個區域的神地。盧牛告訴了Copy這裡共有個寶藏,分別放在第Pi個(1<=Pi<=N)區域。Copy還得知了每個區域之間的距離。現在Copy從1號區域出發,要獲得所有的寶藏併到n號區域離開。Copy很懶 ...
  • 想挖個坑督促自己練技術,有時候想到一個項目,大概想了一些要實現的功能,怎麼實現。現在覺得自己差不多能完成QQ空間的主要功能了。準備立個牌坊,寫一個類似功能的網站。並且把進度放到這裡來。 初步計劃實現以下功能 1、用戶註冊、登錄、信息修改; 2、用戶進行好友關註、推送好用動態; 3、發表日誌、評論和評 ...
  • 目錄 題目描述 思路 程式(C++版&java版) 詳解 題目描述: 思路: 這道題實在是太經典,一道題裡面考察了幾個知識點: 1.鏈表是否有環的判斷 2.鏈表若有環,要找到環的入口節點 3.兩個鏈表的多種情況分析 另外,左老師講得實在是太贊了. 程式(詳解在後面): 詳解 先把幾種情況羅列一下: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...