Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:需要类似字节的对象,而不是';dict';_Python_Python 3.x - Fatal编程技术网

Python TypeError:需要类似字节的对象,而不是';dict';

Python TypeError:需要类似字节的对象,而不是';dict';,python,python-3.x,Python,Python 3.x,这里是代码。 所以当我运行它时,它给出了“TypeError:a bytes-like-object是必需的,而不是'dict'”,我尝试了许多解决方案,没有任何帮助。 有人能帮我吗? 谢谢 f.写入(数据) 这就是问题所在。 您传入的是字典,而不是类似字节的对象。 例如,当我将您的代码更改为以下内容时: #coding:utf-8 import requests from bs4 import BeautifulSoup url = 'http://news.qq.com/' wbdata

这里是代码。 所以当我运行它时,它给出了“TypeError:a bytes-like-object是必需的,而不是'dict'”,我尝试了许多解决方案,没有任何帮助。 有人能帮我吗? 谢谢

f.写入(数据)

这就是问题所在。 您传入的是字典,而不是类似字节的对象。 例如,当我将您的代码更改为以下内容时:

#coding:utf-8
import requests
from bs4 import BeautifulSoup

url = 'http://news.qq.com/'
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
news_title = soup.select("div.text > em.f14 > a.linkto")

for n in news_title:
    title = n.get_text()
    link = n.get("href")
    data = {"标题":title,"链接":link}
    print(data)
    f = open('news.txt','wb')
    f.write(data)
    f.close()
#coding:utf-8
import requests
from bs4 import BeautifulSoup

url = 'http://news.qq.com/'
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
news_title = soup.select("div.text > em.f14 > a.linkto")

for n in news_title:
    title = n.get_text()
    link = n.get("href")
    data = {"k":title,"a":link}
    print(data)
    f = open('news.txt','wb')
    data = b'123'
    f.write(data)
    f.close()
。。。我得到以下信息:

#coding:utf-8
import requests
from bs4 import BeautifulSoup

url = 'http://news.qq.com/'
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
news_title = soup.select("div.text > em.f14 > a.linkto")

for n in news_title:
    title = n.get_text()
    link = n.get("href")
    data = {"标题":title,"链接":link}
    print(data)
    f = open('news.txt','wb')
    f.write(data)
    f.close()
#coding:utf-8
import requests
from bs4 import BeautifulSoup

url = 'http://news.qq.com/'
wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
news_title = soup.select("div.text > em.f14 > a.linkto")

for n in news_title:
    title = n.get_text()
    link = n.get("href")
    data = {"k":title,"a":link}
    print(data)
    f = open('news.txt','wb')
    data = b'123'
    f.write(data)
    f.close()
我想这就是你想要的

或者,更改行:

{'k': '辽宁舰将绕台一周“武吓”蔡英文?外交部回应', 'a': 'http://news.qq.com/a/20170104/031454.htm'} ...

这样你就可以用str而不是像字节一样的对象来写了。
在任何情况下,您都不应该传递口述。

也许您应该在写入标题和链接之前打开文件,在写入结束时关闭文件

f = open('news.txt', 'w')

请用整个错误消息编辑您的问题。它包括有关导致错误的行的信息。还请描述程序的预期结果。文件“E:\重要文件\1140556027\FileRecv\python爬取图片\腾讯新闻\爬取腾讯新闻.py”,第16行,f.write(data)TypeError:需要一个类似字节的对象,而不是“dict”[在1.2s中完成,退出代码为1]请编辑您的问题,而不是发表评论。同时告诉我们哪一行是16?@juanpa.arrivillaga完全同意。我想他可能只是想从页面上写标题。如果它是一个对象,那么他需要一个合适的序列化器和反序列化器。你能告诉我为什么,“data=b'123'”是什么意思吗?为什么?它只是任何字节字符串。f、 write()需要一个类似字节的对象。我只是把它放在那里,以防止你的代码因错误而停止。当我使用你的方式时,我无法将结果写入news.txt。在文件中,它显示“123”,为什么?啊。。。我上面给出的代码示例只是为了强调不能直接将字典放入f.write()函数中。如果使用f=open('news.txt','wb'),则需要一个字节字符串/类似字节的对象作为输入;如果使用f=open('news.txt','w'),则需要一个普通的python字符串作为输入。txt文件显示“123”的原因是因为我输入的是b'123',这是一个包含123的字节字符串。因此,在将键和值字符串写入文件之前,您需要将它们转换为字节字符串或普通python字符串。请告诉我如何将“数据”写入文件。