python3爬蟲requests.get(url)出現http 500錯誤
阿新 • • 發佈:2019-02-08
一直想要收集各種一些漏洞的詳細描述,但是如果直接去國家資訊保安漏洞庫,查詢,複製,太機械了,寶寶不想這麼做,漏洞編號我已經找好了,怎樣才能更快的收集它們對應的描述呢?當然是爬蟲了,說幹就幹。
說明
- 漏洞編號存放於cn.txt文字中,cn.txt和python位於同一目錄中
- 利用requests和beautifulsoup模組進行爬蟲。
- 通過檢視網頁原始碼,發現漏洞資訊位於class=’d_ldjj’ 的p標籤中
- 將爬到的漏洞描述,按行寫入“loudong.xls”excel檔案中
程式碼實現
import pyperclip
from xlrd import open_workbook
from xlutils.copy import copy
url='http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD='
#browser=webdriver.Firefox()
CNread=open('cn.txt')
fw=open("loudong.xls","w")
lines=CNread.readlines()
k=len(lines)
print(k)
for i in range(k):
requrl=''.join(['http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=',lines[i]])
print(requrl)
webbrowser.open (requrl)
#requests會自動給連線加上\0A,即十六進位制中的換行'\n'
res=requests.get(requrl)
res.raise_for_status()
soup=bs4.BeautifulSoup(res.text)
#查詢需要的元素
inf=soup.select('.d_ldjj p')
li=inf[1].getText()
vun=li.split('\n')[1]
fw.writelines(vun)
print(vun)
- 請注意,requrl能夠正常被開啟,但是requests總是出現錯誤HTTP 500
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201504-257%0A
- 原來requests自動給requrl添加了%0A,導致不能訪問,剛開始我還以為是網站為了抵制爬蟲而設定的,後面發現,其他的網站也存在這種情況,且
requests.get('http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201504-257')
是正常的,所以‘%0A’並不是被訪問的網站加的,而是requets乾的,只要我們想辦法把它去掉就行,百度一下,%0A發現原來是十六進位制的換行,即’\n’,所以需要去掉換行,可將requrl按行分裂,然後取第一部分:
res=requests.get(requrl.split('\n')[0])
- 果然這樣修改後,執行成功,看著輸出的一個個漏洞資訊描述,感覺自己棒棒噠~為自己點贊!
- 至於為什麼會出現這種情況,我也不知道,親愛的小夥伴,你知道嗎?知道的話,解答下唄,你有遇到這種情況嗎?