从在线词典的源代码创建文本文件 - TypeError:POST数据应该是字节或可迭代的字节。它不能是str类型

时间:2017-05-30 05:57:33

标签: python ubuntu dictionary beautifulsoup pycharm

我是论坛的新手,但我到处搜索过,找不到任何人试图像我一样创建类似的程序。

基本上,我想(最终)用法语输入一个输入词,并将其粘贴到" http:/www.wordreference.com/fren /" (wordreference是一个在线词典),并以某种方式,可能使用网站的源代码,采取单词的翻译,并将其与原始条目一起插入文本文档。

例如,输入" heureux"会产生" happy",这是该网站上列出的第一个翻译。但是,我还没有进入这个过程;我坚持简单的事情 - 访问源代码。我发现,对于每个字典条目,wordreference都会使用" td class='ToWrd'"来开始源代码。 。所以,我的逻辑是在源代码中找到它的第一个实例并将其添加到文本文档中。

不幸的是,使用BeautifulSoup方法和urlopen容量,我没有设法超越第一步。

这是我的代码:

import bs4
from bs4 import BeautifulSoup
from urllib.request import urlopen

url = urlopen("http://www.wordreference.com/fren/lame","lxml" )
content = url.read()
soup = BeautifulSoup(content)
links = soup.findAll("td class='ToWrd'")

我刚刚得到:" TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str." 这项任务很复杂,但你会给我什么建议?我真的很感激。我是python的新手,但我已经付出了很多努力来解决这个问题。非常感谢你。

P.S。我在Ubuntu 16.04上通过PyCharm使用Python 3.5。

1 个答案:

答案 0 :(得分:0)

根据urllib的文档中的建议,您应该使用requests库来进行HTTP。

另请参阅使用findall的语法。如果您只想保留第一个翻译,则必须将结果缩小一些。

from bs4 import BeautifulSoup
import requests

url = "http://www.wordreference.com/fren/lame"
content = requests.get(url).content
soup = BeautifulSoup(content, "html5lib")
links = soup.findAll("td", { "class" : "ToWrd"})
print(links)

# [<td class="ToWrd">Anglais</td>, <td class="ToWrd">blade <em class="tooltip POS2">n<span><i>noun</i>: Refers to person, place, thing, quality, etc. </span></em></td>, ... ]