在编写一个简单的程序时需要帮助

时间:2017-06-11 02:21:57

标签: python

我不是程序员。这是我的第一个计划。

我想:

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

我得到#1工作但是当我搜索字符串“2017年6月5日”时,我收到下面列出的错误。

错误消息

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')

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

就这样做。

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

在您的示例中,您从response.read()获取的所有数据都是字节对象,而不是字符串。您可以在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')

答案 1 :(得分:1)

因为"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: 

答案 2 :(得分:0)

FROM golang:1.8 COPY . /go/src/github.com/codeblooded/test1 WORKDIR /go/src/github.com/codeblooded/test1 RUN echo $PATH RUN go get -d -v ./... RUN go install -v ./... RUN go build -o test1 . CMD ["test1"] EXPOSE 3470 bytes对象,而不是字符串,因此为了使用version: '3' services: postgres: image: postgres volumes: - ./db/data/psql:/var/lib/postgresql/data - ./db/schema:/db/schema redis: image: redis volumes: - ./db/data/redis:/data server: build: . command: test1 volumes: - .:/go/src/github.com/codeblooded/test1 ports: - "3470:3470" depends_on: - postgres - redis 运算符,您必须提供另一个webPageCopy (或类字节)对象。幸运的是,这在Python中非常简单 - 只需在表示文字时使用in前缀:

bytes