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

时间:2017-01-06 03:42:23

标签: python python-3.x

#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()

enter image description here 这是代码。 因此,当我运行它时,它会给出“TypeError:需要类似字节的对象,而不是'dict'”,我尝试了很多解决方案,没有任何帮助。 有人能帮我吗? THX!

2 个答案:

答案 0 :(得分:0)

f.write(数据)

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

#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'} ...

我认为这就是你想要的。

或者更改一行:

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

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

这样你就可以用str而不是像字节的对象来编写。 在任何情况下,你都不应该通过一个词典。

答案 1 :(得分:-1)

也许你应该在写完标题和链接之前打开文件,当你写完结束文件时。

f = open('news.txt','wb')
for n in news_titles:
    title = n.get_text()
    link = n.get("href")
    data= {
        '标题':title,
        '链接':link
    }
    f.write(data['标题'])
    f.write(':')
    f.write(data['链接'])
    f.write('\r\n')
f.close()