python
  • python-2.7
  • xpath
  • html-parsing
  • 2016-05-06 76 views 1 likes 
    1

    我用下面的代碼行從網頁抓取CVE ID的:從xpath去除信息?

    project.cve_information = "".join(xpath_parse(tree, '//div[@id="references"]/a/text()')).split() 
    

    但是,問題是:

      <div id='references'> 
          <b>References:</b> 
          <a href='https://access.redhat.com/security/cve/CVE-2011-3256' target='_blank'>CVE-2011-3256&nbsp;<i class='icon-external-link'></i></a> 
          <a href='https://rhn.redhat.com/errata/RHSA-2011-1402.html' target='_blank'>RHSA-2011-1402&nbsp;<i class='icon-external-link'></i></a><br /> 
         </div> 
    

    參考:CVE-XXXX-XXXX RHSA-XXXX-XXXX

    如何避免RHSA和這些條目被解析?我只想要CVE-xxxx-xxxx值。我用它來提交表單是這樣的:因爲我的代碼往往包括RHSA值

      "form[CVEID]" : ",".join(self.cve_information) if self.cve_information else "GENERIC-MAP-NOMATCH", 
    

    這種形式只執行對CVE值和錯誤的驗證了。

    回答

    1

    您可以使用包含

    h = """ <div id='references'> 
          <b>References:</b> 
          <a href='https://access.redhat.com/security/cve/CVE-2011-3256' target='_blank'>CVE-2011-3256&nbsp;<i class='icon-external-link'></i></a> 
          <a href='https://rhn.redhat.com/errata/RHSA-2011-1402.html' target='_blank'>RHSA-2011-1402&nbsp;<i class='icon-external-link'></i></a><br /> 
         </div>""" 
    
    from lxml import html 
    
    xml = html.fromstring(h) 
    
    urls = xml.xpath('//div[@id="references"]/a[contains(@href, "CVE")]/@href') 
    

    或者,如果你想忽略與RHSA的HREF中,你可以使用不包含

    urls = xml.xpath('//div[@id="references"]/a[not(contains(@href, "RHSA"))]/@href') 
    

    兩個會給你:

    ['https://access.redhat.com/security/cve/CVE-2011-3256'] 
    
    +0

    恩,我想我沒有正確解釋我的問題。我正在使用xpath表達式來解析「引用」字段。然後,我在其他地方使用「CVE-xxxx-xxxx」ID,以便它可以是https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-xxxx-xxxx。使用目前的解決方案,我得到 - 警告:無法找到有關CVE的信息CVE-2011-3256 - CVE-2011-3256 – Metahuman

    +0

    的額外「CVE」您想要CVE-2011-3256嗎?如果它們總是在'/'末尾並且提取,如果它們可以在任何地方,那麼你需要一個正則表達式或者分割並且使用str.strartswith來找到你想要的子字符串 –

    +0

    把xpath從'/ @ href '到'/ text()' –

    相關問題