【问题标题】:How to get a HTML tag value using re如何使用 re 获取 HTML 标记值
【发布时间】:2018-12-04 08:09:42
【问题描述】:

我正在使用 python 请求库提取网站中包含的 HTML 代码。然后我需要从这些 HTML 代码中获取一些信息。但不知何故,我没有得到那个数据。我如何获得这些数据?

HTML

<span data-testid="vuln-cvssv2-additional">
    Victim must voluntarily interact with attack mechanism
    <br/>
    Allows unauthorized disclosure of information
    <br/>
    Allows unauthorized modification
    <br/>
</span>

Python

import requests
import re

link = "https://nvd.nist.gov/vuln/detail/CVE-2017-10119"
f = requests.get(link)
deneme = str(f.text)

re_base_vector = r'\<span data-testid\s*\=\s*\"vuln-cvssv2- additional"\s*\>(.*?(\n))+.*?\n\<\\span\>'
find_base_vector = re.search(re_base_vector, deneme)

print(find_base_vector)

print(find_base_vector.group(0))

我想要的输出

Victim must voluntarily interact with attack mechanism. 
Allows unauthorized disclosure of information. 
Allows unauthorized modification

【问题讨论】:

  • 为什么要使用正则表达式?使用 html 通常是个坏主意。

标签: python web-scraping python-requests


【解决方案1】:

正则表达式通常是a bad idea 与 HTML。使用 BeautifulSoup 使用 HTML 解析器读取它,然后使用属性选择器:

soup.select_one("span[data-testid='vuln-cvssv2-additional']")

例如

import requests
from bs4 import BeautifulSoup

html='''
<span data-testid="vuln-cvssv2-additional">
    Victim must voluntarily interact with attack mechanism
    <br/>
    Allows unauthorized disclosure of information
    <br/>
    Allows unauthorized modification
    <br/>
</span>
'''
soup = BeautifulSoup(html, "lxml")
item = soup.select_one("span[data-testid='vuln-cvssv2-additional']").text
print(item)

【讨论】:

  • 是的,它奏效了。为 HTML 使用 BeautifulSoup 是一个更合乎逻辑的选择。
【解决方案2】:

BeautifulSoup 将帮助您更好地解析和浏览 html。简单易行地解析给定的 html。

参考:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多