python - 用于在 HTML 行中查找整数的正则表达式
问题描述
我正在尝试从使用 BeautifulSoup 包提取的 HTML 代码行中提取整数值,但是我收到以下错误消息,但我不知道为什么。
每个跨度标签都可以毫无问题地检索,它看起来像这样:
TAG <span class="comments">2</span>
我需要在正则表达式中实施任何更改,还是我的代码存在实际问题?
我试图修改正则表达式,并删除 numlist = list()
[...]
import re
numlist = list()
totalsum = 0
count = 0
[...]
#Retrieve all of the span tags
tags = soup('span')
for tag in tags:
count = count + 1
numlist = re.findall('([0-9]+)', tag)
if len(numlist) > 0:
for item in numlist:
totalsum = totalsum + int(item)
print("Count ",count)
print("Total Sum", totalsum)
totalsum 函数应该总结所有找到的值,但我在命令提示符中收到以下错误消息:
Traceback (most recent call last):
File "assignment1week4.py", line 23, in <module>
numlist = re.findall('([0-9]+)', tag)
File "C:\Users\konst\AppData\Local\Programs\Python\Python37-32\lib\re.py", line 223, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
解决方案
这看起来是一个代码问题。你得到一个TypeError
告诉你你需要将一个字符串传递给re.findall
. 我们知道那'([0-9]+)'
是一个字符串,所以它一定tag
不是。IIRC,使用 BeautifulSoup 查找类型的所有标签返回代表 HTML 标签的对象数组,而不是字符串列表。
这个答案有一些关于获取字符串文本的信息,但如果你不想查看所有这些信息,它可以归结为使用.text
属性,例如numlist = re.findall('([0-9]+)', tag.text)
.
推荐阅读
- javascript - 仅使用 URL 在表单数据中附加文件
- bootstrap-4 - Bootstrap 4 列排序用例
- python - 从两个列表创建目录
- javascript - 在 Node JS 中链接请求和事件数据
- php - 流明 - handler.php 不反映更新
- laravel - 带有参数的 http POST 到 /session 引发的 curl 错误:Facebook\WebDriver\Exception
- f# - 错误 FS0193:类型约束不匹配
- python - LUNA16 切片注释
- opencv - OpenCV:特征匹配+单应性帮助调整结果
- cloudera-cdh - 从 Knox 访问 Cloudera 上的 kerberized WebHDFS