TypeError:无法将字节连接到str,然后,TypeError:write()参数必须是str,而不是字节

时间:2017-03-07 14:06:22

标签: python

最近学习Python,我正在尝试做一个小练习。然后出现这个错误。

  File "/Users/Alexis/.spyder-py3/temp.py", line 29, in <module>
    f.write(txt+'\n')

TypeError: can't concat bytes to str

有谁能告诉我这里出了什么问题,拜托?

import requests
from bs4 import BeautifulSoup
import re

r=requests.get(url='http://news.qq.com/world_index.shtml')
soup=BeautifulSoup(r.text,'lxml')
f=open('/Users/Alexis/Desktop/news.text','w')
f.seek(0)

f.write('Today News')

    news=soup.find_all('a',href=re.compile('http://news.qq.com/a/20170307/'))

for i in news:
    txt=i.text.encode('utf-8').strip()
    if txt=='':
        continue
    else:
        u=i.attrs['href']
        ur=requests.get(url=u)
        usoup=BeautifulSoup(ur.text,'lxml')
        f.write(txt+'\n')
        f.write('Text:\n')

        p=usoup.find('div',id='Cnt-Main-Article-QQ').find_all('p')
        for i in p:            
            f.write(i.text+'\n')

    break

f.close()
print('Finish')

我尝试过几种不同的方法

我试过了

f.write(txt+'\n'.encode('ascii'))

TypeError: write() argument must be str, not bytes
f.write(txt+'\n'.encode('utf-8'))

TypeError: write() argument must be str, not bytes
TypeError: write() argument must be str, not bytes

感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

试试这个:f.write(str(txt)+'\n', 'utf-8') #or whichever way you are encoding

从您的错误消息中,write()想要一个字符串,但是您要给它字节,因此,您必须调用str()将txt转换为str类型。

答案 1 :(得分:0)

尝试以下。 f.write(txt.decode()+'\ n')