【问题标题】:TypeError: expected string or bytes-like objectTypeError:预期的字符串或类似字节的对象
【发布时间】:2016-03-11 10:28:43
【问题描述】:

我写了一个 script 来解析 html 并仅打印文本内容。我想忽略标签。但是我的程序有问题。我不确定它是什么。请帮帮我。

import urllib.request
import re
from bs4 import BeautifulSoup
url = "www.example.com"

def hi():
    dep = urllib.request.urlopen(url)
    soup = BeautifulSoup(dep, 'html.parser')
    for link in soup.find_all('p', string=True):
        result = re.sub(b'<.*?>', "", link)
        print (result)
hi() 

网站link。

【问题讨论】:

  • 在此处添加代码。
  • 并确保包含完整的回溯作为文本以及您尝试解决问题的内容。
  • @Vasanth 发布代码而不是您尝试抓取的网址..
  • 我在这里添加了我的代码。提前致谢。
  • 将您的屏幕截图转换为有效代码和有效回溯。你在编辑之前发布了非常混乱的东西。

标签: python beautifulsoup html-parsing


【解决方案1】:

我相信,您在 link 变量中有 NavigableString。

强制将其转换为字符串,如:

for link in soup.find_all('p', string=True):
    result = re.sub(b'<.*?>', "", str(link))
    print (result)

【讨论】:

  • 但是现在,它显示了一个 TypeError: cannot use a bytes pattern on a string-like object。
  • 将b'&lt;.*?&gt;' 更改为r'&lt;.*?&gt;'。
  • Hurrayyyy... 非常感谢。你能解释一下那条线吗?因为我从另一个代码中复制了该行。我不知道背后的逻辑是什么:)
  • @VasanthPrabakar,r 代表正则表达式,b 代表字节。它们的行为也因 python 版本而异。
  • r 用于原始,而不是正则表达式。它对正则表达式有帮助,因为它们使用 `\` 与字符串通常对待它的方式不同,但它不是为正则表达式创建的;它只是意味着原始。
猜你喜欢
  • 2019-10-31
  • 2018-10-17
  • 2020-07-08
  • 2018-05-04
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多