1. 程式人生 > >爬取某網站的所有烏雲漏洞文章,儲存為pdf檔案

爬取某網站的所有烏雲漏洞文章,儲存為pdf檔案

鼎鼎大名的烏雲,存在了6年左右,就停擺了,真是可惜。。。

這是從某個網站看到的烏雲文章,爬取儲存下來以作學習使用

建立一個資料夾wooyun,把下面的程式碼儲存到一個檔案如test.py,放在該檔案裡面

# -*- coding: utf-8 -*-
import urllib2
import pdfkit
from lxml import etree
import time
import random
import os
import shutil


def modify_filename(file1,file2,filename,m):
   '''
   更改檔名函式
   如有多個同名檔案,自動在檔名末尾加上數字,從2開始。
   方法遞迴

   '''
if os.path.exists(file2): m += 1 file2 = filename + str(m) + '.pdf' modify_filename(file1,file2,filename,m) else: os.rename(file1,file2) return def main(): '主函式:爬取所有烏雲文章,以漏洞標題作為檔名' # 外迴圈控制頁數 for i in range(1,167): # 建立一個資料夾來存放該頁所有文章,資料夾名字為分頁數字
os.mkdir(str(i)) url = "http://xsspt.com/index.php?do=blist&page=" + str(i) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', 'Cookie': '__cfduid=db29c8ab99daaf6824f89ff256974cc131532950162; bdshare_firstime=1532950162131; UM_distinctid=164eaf6ebae83c-0945623eb9d7ee-47e1039-1fa400-164eaf6ebaf67b; Hm_lvt_c12f88b5c1cd041a732dea597a5ec94c=1532950162,1532950477; CNZZDATA1260224584=5670'
} req = urllib2.Request(url,headers=headers) res = urllib2.urlopen(req) # print(res.getcode()) # print(res.url) html = res.read() content = etree.HTML(html) # 獲取每頁的文章連結列表 links = content.xpath('//td/a/@href') n = 0 # 遍歷該分頁裡面的文章連結 for each in links: each = 'http://xsspt.com' + each req2 = urllib2.Request(each,headers=headers) html2 = urllib2.urlopen(req2).read() content2 = etree.HTML(html2) # 獲取文章章標題 title = content2.xpath("//h3[@class='wybug_title']/text()")[0] # 設定儲存的檔名,由於windows環境對檔名命名有'/'、'\'、'?'、'|'、'<'、'>'、'"'、'*'有限制,所以要有如下過濾 filename = title[5:].strip().replace('/','_').replace('\\','_').replace('<','').replace('>','').replace('"','').replace('(','').replace(')','').replace('[','').replace(']','').replace('\\','').replace('%','').replace(';','').replace('*','').replace('?','').replace(':','').replace('|','') # file = filename + ".pdf" n += 1 # 初始檔名 file1 = str(n) + '.pdf' # 儲存檔名 file2 = filename + '.pdf' # 儲存pdf檔案到本地 path_wk = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe' config = pdfkit.configuration(wkhtmltopdf = path_wk) pdfkit.from_url(each, file1, configuration=config) # m變數值用來區分同名檔案 m = 1 # 由於檔名有重複,所以使用遞迴函式來處理,檔案重名的,檔名末尾加遞增數字儲存。如a.pdf,a2.pdf modify_filename(file1,file2,filename,m) time.sleep(random.randint(1,3)) # 把當前分頁裡面的所有的文章檔案移動到對應的分頁檔案裡面 for d in os.listdir('.'): if d.split('.')[-1] == 'pdf': shutil.move(d,str(i)) if __name__ == '__main__': main()

結果如下:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述