无法使用 re 和 beautifulsoup 从网页中获取数字

Trouble getting numbers off of a webpage using re and beautifulsoup

我正在做一项作业,我必须浏览网页,提取数字并计算总和,但是我在获取数字时遇到了问题,我相信我的重新没有完成这项工作,这是代码。

from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
import re

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = 'http://py4e-data.dr-chuck.net/comments_687617.html'
html = urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, "html.parser")

tags = (soup.find_all('tr'))

numbers = re.findall('[0-9]+', tags)

print (numbers)

e: #changed 'tags'to tags 但问题仍然存在。

使用变量 tags,而不是字符串 'tags': 你的线路

numbers = re.findall('[0-9]+', 'tags')

应该是

numbers = re.findall('[0-9]+', tags)

re.findall() 期望 string 作为第二个参数。您正在传递 'tags' ,由于引号,它将作为字符串而不是变量传递。而且,这个字符串中没有任何数字。所以,输出是一个空列表。

要获得正确的输出,您可以将所有标签连接成一个字符串并将其传递给函数。这是一种方法:

...

tags = (soup.find_all('tr'))

# Concatenate all tags to one string
string = ""
for tag in tags:
  string += str(tag)

numbers = re.findall('[0-9]+', string)
print(numbers)

输出:

['97', '96', '94', '91', '90', '86', '84', '81', '81', '77', '76', '75', '75', '74', '72', '70', '70', '70', '66', '64', '64', '63', '56', '52', '52', '47', '47', '44', '43', '40', '40', '40', '40', '37', '36', '35', '33', '31', '30', '28', '22', '21', '21', '11', '11', '10', '7', '6', '2', '1']

编辑

不使用正则表达式的更简单的方法:

tags = soup.find_all('span', class_="comments")
numbers = [tag.get_text() for tag in tags]
print(numbers)