无法使用 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)
我正在做一项作业,我必须浏览网页,提取数字并计算总和,但是我在获取数字时遇到了问题,我相信我的重新没有完成这项工作,这是代码。
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)