簡體   English   中英

為什么我不能使用 Python 刮掉那么大的 XML 文件?

[英]Why I can't scrape that large XML file using Python?

有誰知道為什么這段代碼不起作用? 當我想用某個日期的數據(例如僅從 2017 年開始但不是這個日期)刮取較小的文件時,它可以完美地工作。 這個文件是不是太大了? 沒有錯誤或類似的東西。 每次我運行此腳本但提到的文件較小時,下載所有內容並保存到數據庫中大約需要 30 秒,因此我認為代碼中沒有錯誤。 運行腳本后,我只是得到“進程完成,退出代碼 0”,僅此而已。

from bs4 import BeautifulSoup
import urllib.request
from app import db
from models import CveData
from sqlalchemy.exc import IntegrityError


url = "https://cve.mitre.org/data/downloads/allitems.xml"
r = urllib.request.urlopen(url)

xml = BeautifulSoup(r, 'xml')
vuln = xml.findAll('Vulnerability')

for element in vuln:
    note = element.findAll('Notes')
    title = element.find('CVE').text 

    for element in note:
        desc = element.find(Type="Description").text
        test_date = element.find(Title="Published")

        if test_date is None:
            pass
        else:
            date = test_date.text
            data = CveData(title,date,desc)
            try:
                db.session.add(data)
                db.session.commit()
                print("adding... " + title)

            # don't stop the stream, ignore the duplicates
            except IntegrityError:
                db.session.rollback()

我下載了你說的文件不起作用,而你說的那個文件做了並運行了這兩個 grep,結果不同:

grep -c "</Vulnerability>" allitems-cvrf-year-2019.xml
21386

grep -c "</Vulnerability>" allitems.xml
0

程序在打開文件時沒有停止,它正在運行完成。 您沒有得到任何 output 因為 xml 文件中沒有Vulnerability標記。 (現在我的 grep 在技術上並不准確,因為我相信漏洞結束標記中可能有空格,但我懷疑這里的情況。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM