想做一个漏洞信息数据库,需要爬取几个漏洞检测网站的信息,发现这几个网站或多或少存在一些反爬机制,故针对不同的网站可以采取不同的爬虫策略
1、request直接爬取
对于没有反爬机制的网站,可以直接使用request爬取,可加入header请求头和延长等待时间
示例网站:首页 - 信息安全漏洞门户 VULHUB
import requests
from bs4 import BeautifulSoup
import time
# get 网站文本信息
def get_html(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',
}
r = requests.get(url, headers=headers, timeout=60)
return r.text
except:
return " ERROR "
def get_content(url):
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
liTags = soup.find_all('tr')
count = 0
for li in liTags:
try:
resource = 'http://vulhub.org.cn/' # 获取来源
id = 'http://vulhub.org.cn/' + li.find('a')['href'] # 标识
submit_time = li.find('td', attrs={'class': 'hidden-xs'}).text.strip() # 提交时间
vul_level = li.find('span', attrs={'class': 'grade'})['title'] # 漏洞等级
vul_title = li.find_all('td')[3].text.strip() # 漏洞名称
chinese_data = li.find('span', attrs={'class': 'chinese_True'})['title'] # 有无中文数据
explit_data = li.find('span', attrs={'class': 'exploit_False'})['title'] # 漏洞利用代码
detail_data = li.find('span', attrs={'class': 'details_True'})['title'] # 漏洞细节
software_data = li.find('span', attrs={'class': 'software_False'})['title'] # 漏洞载体
analyzer_data = li.find('span', attrs={'class': 'analyzer_False'})['title'] # 漏洞检测脚本
populator = li.find_all('td')[5].text.strip() #人气
count += 1
value = (resource, id