【问题标题】:Why does BeautifulSoup (in Python script) only return some of the numbers from HTML为什么 BeautifulSoup(在 Python 脚本中)只返回 HTML 中的一些数字
【发布时间】:2017-04-19 22:35:25
【问题描述】:

由于我从这里获得了一些帮助,我能够编写一个 Python 脚本,允许我从 HTML 数据中提取数字。但是,由于某种原因,即使我相信我在 findall() 方法中使用了正确的标准,也不是所有的数字都被提取了。这是我的脚本的样子:

search1 = []
soup = BeautifulSoup(data_payload, 'html.parser')
data = soup.findAll("td", {"class":"confluenceTd"})
for d in data:
    m = re.search('([0-9]+)',str(d.findAll(text=True)))
    if m:
        search1.append(m.group(0))

print search1

这是一个 HTML 示例,其中所有数字都被拉出:

<td class="confluenceTd">
         <span>
          AutoRun
         </span>
        </td>
        <td class="confluenceTd">
         <span>
          1514444
         </span>
        </td>
        <td class="confluenceTd" colspan="1">
         <span style="color: rgb(0,0,0);">
          61888758
         </span>

在下面的示例中,只有“63811289”被拉出,没有其他内容:

<td class="confluenceTd" colspan="1">
         <p>
          CSY: 63811289, 62277372, 612377891, 653856796
         </p>
         <p>
          RTY: 54346678
         </p>
         </td>

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么要使用正则表达式来查找数字,而不是使用 BeautifulSoup 来查找包含数字的&lt;span&gt;
  • @Barmar 老实说,我对美汤不太熟悉。有没有更简单的方法?
  • 同你找到td元素一样,你也可以在里面找到span
  • for span in d.findAll('span'):

标签: python python-2.7 beautifulsoup


【解决方案1】:

re.search 只返回第一个匹配项:https://docs.python.org/2/library/re.html#re.search

你可以用re.finditer()拉出所有的字符串:

for i in re.finditer('([0-9]+)',str(d.findAll(text=True))):
    search1.append(i.group(0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多