Проблема с извлечением значений 'td' с сайта с помощью Beautifulsoup - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь очистить сайт, чтобы сохранить всю информацию на всех страницах в соответствии с годами.Я не получаю никакой ошибки, но не получаю детали также.В нем должны быть строки, приведенные в 1, 2. HTM

Может кто-нибудь указать, где я иду не так.Это код:

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import csv

file = "Details2.csv"
Headers = ("ID", "ID", "# of Exploits", "Type(s)", "Publish Date", "Update Date", "Score", "Gained Access Level", "Access", "Complexity", "Authentication", "Confiden", "Integr", "Avail")
f = open(file, "w")
csvriter = csv.writer(f, delimiter=',', quotechar='"')
csvriter.writerow(Headers)
for page in range(1,130):
  try:  
    url = "https://www.justfly.com/vulner-list.php?vendor_id=0& product_id=0&version_id=0&page={}&hasexp=0&opdos=0&opec=0&opov=0&opcsrf=0&opgpriv=0&opsqli=0&opxss=0&opdirt=0&opmemc=0&ophttprs=0&opbyp=0&opfileinc=0&opginf=0&cvssscoremin=0&cvssscoremax=0&year=2015&month=0&cweid=0&order=1&trc=6484&sha=f941b721732be362e81064704448767014116e7c".format(page)
#html = urlopen(url)
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

webpage = urlopen(req).read()

bs=BeautifulSoup(webpage, "lxml")
table_body=bs.find('tbody')
rows = table_body.find_all("div", {"class":"srrowns"})
for row in rows:
  cols=row.find_all('td')
  cols=[x.text.strip() for x in cols]
  print("cols", file = f)
  f.write("{}".format(cols).replace(",",",",",",",",",","|")+ "\n")
  except: AttributeError  
f.close()

1 Ответ

0 голосов
/ 17 декабря 2018

Попробуйте приведенный ниже скрипт.Он должен получить необходимые данные, которые вы упомянули выше.Оказалось, что вы выбрали неправильное имя тега div.Это должно быть tr вместо.

import csv
import requests
from bs4 import BeautifulSoup

url = "https://www.cvedetails.com/vulnerability-list.php?vendor_id=0& product_id=0&version_id=0&page={}&hasexp=0&opdos=0&opec=0&opov=0&opcsrf=0&opgpriv=0&opsqli=0&opxss=0&opdirt=0&opmemc=0&ophttprs=0&opbyp=0&opfileinc=0&opginf=0&cvssscoremin=0&cvssscoremax=0&year=2015&month=0&cweid=0&order=1&trc=6484&sha=f941b721732be362e81064704448767014116e7c"

Headers = ("CVE ID", "CWE ID", "# of Exploits", "Vulnerability Type(s)", "Publish Date", "Update Date", "Score", "Gained Access Level", "Access", "Complexity", "Authentication", "Confidentiality", "Integrity", "Availability")
with open("Details2.csv", "w", newline="") as f:
    csvriter = csv.writer(f)
    csvriter.writerow(Headers)

    for page in range(1,5): #change here the highest number you wanna go across
        res = requests.get(url.format(page), headers={'User-Agent':'Mozilla/5.0'})
        bs = BeautifulSoup(res.text, "lxml")
        for row in bs.find(id='vulnslisttable').find_all("tr", class_="srrowns"):
            cols = [x.get_text(strip=True) for x in row.find_all('td')]
            print(cols)
            csvriter.writerow(cols)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...