scrapy爬取cnnvd网址数据
附上GitHub鏈接
https://github.com/luweiwei1111/python_spider/tree/master/scrapy/cnnvd
說明:
1.本程序用于爬取cnnvd網址的數據,并將數據通過sqlite3數據庫保存在cnnvd.db庫文件里面,
里面有兩張表:cve_cnnvd_cn 保存cnnvd的相關信息
? ? ? ? ? ? ? cnnvd_url ? ?保存cnnvd的url路徑
2.如何進行爬取(分為兩步進行爬取)
python main_url.py ?爬取cnnvd的url路徑保存起來,由于有時候會由于網絡原因而導致失敗,所以需要繼續爬取。
python main.py ? ? ?遍歷cnnvd_url表,并并在cve_cnnvd_cn里面查找cnnvd,如果已經爬取的則不再爬取,否則就需要爬取,支持繼續爬取的功能。
3.由于經常會被封鎖IP,所以需要使用到IP池代理,我們使用免費的代理(相關網址http://ip.zdaye.com/dayProxy/ip/133009.html),由于免費的代理不穩定,所以我們需要把爬取的數據緩存起來。
防止被禁的策略:
(1)設置download_delay
(2)禁止cookies(COOKIES_ENABLES=False)
(3)使用user agent池
(4)使用IP池
(5)分布式爬取(TODO)
4.遇到的問題:
(1)IP被封鎖
(2)html解析,需要使用beautifulsoup和Xpath配合使用,然后逐個解析數據
(3)由于網絡不穩定的原因,有時候重試幾次均失敗,導致爬取的內容不全,所以需要支持繼續爬取。
在每次爬取前,先判斷下該url是否完成爬取,如果已經爬取成功則不再爬取,否則繼續爬取。
遇到的問題:
1.使用xpath有時候無法獲取具體位置信息,此時需要使用BeautifuSoup。
所以需要介紹下Beautifulsoup
p_list = BeautifulSoup(response.text, 'lxml').find('h2', text=(u"漏洞簡介")).find_parent().find_parent().find_all('p')
p_list = BeautifulSoup(response.text, 'lxml').find('span', text=re.compile("商:")).find(text=re.compile("廠")).find_parent().find_parent()
?
?
總結
以上是生活随笔為你收集整理的scrapy爬取cnnvd网址数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libSVM介绍(二)
- 下一篇: C++string类常用函数 c++中