为什么我能';你不能用Python刮取那个大的XML文件吗?

为什么我能';你不能用Python刮取那个大的XML文件吗?,python,xml,beautifulsoup,Python,Xml,Beautifulsoup,有人知道为什么这个代码不起作用吗?当我想使用某个日期的数据(例如仅从2017年开始,但不使用此日期)刮取较小的文件时,它可以完美地工作。这个文件太大还是怎么的?没有错误或类似的事情。每次我运行这个脚本,但是使用上面提到的较小的文件,下载所有内容并保存到数据库大约需要30秒,所以我认为代码中没有错误。运行脚本后,我只得到“进程结束,退出代码为0”之类的信息 from bs4 import BeautifulSoup import urllib.request from app import db

有人知道为什么这个代码不起作用吗?当我想使用某个日期的数据(例如仅从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()

我下载了你说不起作用的文件,你说的那个文件起作用了,我运行了这两个greps,结果不同:

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

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

程序在打开文件时没有停止,而是一直运行到完成。您没有得到任何输出,因为xml文件中没有
漏洞
标记。(现在我的grep在技术上并不准确,因为我相信漏洞关闭标签中可能有空格,但我怀疑这里的情况是这样的。)

使用调试器,逐步检查代码,看看出了什么问题。如果不调试我的代码,我决不会在这里问任何问题。我仍然找不到任何解决办法这就是我来这里的原因。即使我很欣赏你的回答,我认为这是毫无意义的。嘿@Vicaris2code,人们接下来会问的很多问题都是你在调试时可能已经发现的。比如,在你的代码路径中,哪里发生了错误的转向?例如,代码是否曾经进入您的try语句中?您的意思是它在这里失败:
r=urllib.request.urlopen(url)
,而失败是指代码在该行之后不再执行?比如说,如果你在它后面放了一个打印语句,它就不会出现了?伙计,那是一个171MB的XML文件。你可能需要设置一些超时,并确保你有足够的内存来吃它。也许首先只是尝试获取并保存本地文件,以确保您能够成功下载。然后测试您是否可以使用BeautifulSoup读取/解析该本地文件。恐怕您是对的。非常感谢你的帮助。我一定错过了什么。