Traceback (most recent call last): File "C:\Users\test\PycharmProjects\pythonProject\DIDI_test1.py", line 28, in <module> matches = re.findall(pattern, soup) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\test\AppData\Local\Programs\Python\Python311\Lib\re\__init__.py", line 216, in findall return _compile(pattern, flags).findall(string) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: expected string or bytes-like object, got 'BeautifulSoup'
时间: 2023-07-21 17:09:31 浏览: 122
浅谈Python traceback的优雅处理
这个错误是因为 `re.findall` 函数期望的是一个字符串或类似字节的对象,而你传递给它的是一个 `BeautifulSoup` 对象。
在这种情况下,你需要将 `BeautifulSoup` 对象转换为字符串,才能使用正则表达式进行匹配。你可以使用 `str()` 函数将 `soup` 对象转换为字符串,然后再将其传递给 `re.findall` 函数。
修改后的代码如下:
```python
# 打开文件并解析HTML源代码
with open(file_path, 'r', encoding='utf-8') as f:
soup = BeautifulSoup(f, 'html.parser')
# 将soup对象转换为字符串
html_string = str(soup)
# 提取talkid、时间、发送号码、接收号码、信息类型和消息内容的正则表达式模式
pattern = r'\[talkid:(\d+)\](.*?)</span> 向 (.*?) 发送 (.*?):\[(.*?)\]'
matches = re.findall(pattern, html_string)
```
通过将 `soup` 对象转换为字符串 `html_string`,然后将 `html_string` 传递给 `re.findall` 函数,就可以解决这个问题了。
阅读全文