需要帮助写一个简单的程序吗

2024-10-02 16:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我不是程序员。这是我的第一个节目。你知道吗

我想:

  • 将网页复制到变量
  • 在变量中搜索字符串

我有#1要工作,但是当我搜索字符串“June 5,2017”时,我得到下面列出的错误。你知道吗

错误消息

Traceback (most recent call last):
  File "C:\Users\Family\Documents\Python Programs\webpagecopy2.py", line 8, in <module>
    if "June 5, 2017" in webPageCopy:
TypeError: a bytes-like object is required, not 'str'

代码如下:

# webpagecopy2.py
import urllib.request
webpagestring = " "
url = 'https://www.nwbio.com/press-releases/'
response = urllib.request.urlopen(url)
webPageCopy = response.read()
print(webPageCopy)
if "June 5, 2017" in webPageCopy: 
   print ('success')

如有任何建议,将不胜感激。你知道吗


Tags: 字符串inpyurlifresponserequest错误
3条回答

因为"June 5, 2017"是一个str对象,而webPageCopy是一个类似字节的对象。你知道吗

您需要将webPageCopy转换为str类型。你知道吗

if "June 5, 2017" in str(webPageCopy): 

或者将“2017年6月5日”定义为Wasi Ahmad提到的类似字节的对象。你知道吗

if b"June 5, 2017" in webPageCopy: 

就这么做吧。你知道吗

if b"June 5, 2017" in webPageCopy: 
   print ('success')

在您的示例中,从response.read()获得的所有数据都是bytes对象,而不是string。在python中可以看到对象的类型,如下所示。你知道吗

print(type(webPageCopy)) # prints - <class 'bytes'>

因此,在目标字符串之前添加前缀(b)可以解决问题。你知道吗

其他替代方案:

if bytes("June 5, 2017", 'utf8') in webPageCopy: 
    print ('success')

或者

if "June 5, 2017".encode('utf8') in webPageCopy: 
   print ('success')

webPageCopy是一个^{}对象,而不是一个字符串,因此为了使用in运算符,您必须提供另一个bytes(或类似字节的)对象。幸运的是,这在Python中非常简单-只要在表示文字时使用b前缀:

if b"June 5, 2017" in webPageCopy: 
   print ('success')

相关问题 更多 >