Python 拆下';从webscrape输出的u

Python 拆下';从webscrape输出的u,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,嗨,我正在使用Beautifulsoup解析一个网站,并获得一个名称作为输出。但是在运行脚本之后,我得到了一个[u'word1',u'word2',u'word3']输出。我要找的是'word1 word2 word3'。如何摆脱这个u'并使结果成为单个字符串 from bs4 import BeautifulSoup import urllib2 import re myfile = open("base/dogs.txt","w+") myfile.close() url="http:/

嗨,我正在使用Beautifulsoup解析一个网站,并获得一个名称作为输出。但是在运行脚本之后,我得到了一个
[u'word1',u'word2',u'word3']
输出。我要找的是
'word1 word2 word3'
。如何摆脱这个
u'
并使结果成为单个字符串

from bs4 import BeautifulSoup
import urllib2
import re

myfile = open("base/dogs.txt","w+")
myfile.close()

url="http://trackinfo.com/entries-race.jsp?raceid=GBR$20140302A01"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
names=soup.findAll('a',{'href':re.compile("dog")})
myfile = open("base/dogs.txt","w+")
for eachname in names:
    d = (str(eachname.string.split()))+"\n"
    print [x.encode('ascii') for x in d]
    myfile.write(d)

myfile.close()

这里使用
.encode()
给出的答案是你想要的,但可能不是你需要的。您可以保留unicode编码,而不以显示其编码或类型的方式表示对象。因此,它们仍然是
[u'word1',u'word2',u'word3']
——这避免了破坏对无法用ASCII表示的语言的支持,但打印为
word1 word2 word3

只要做:

for eachname in names:
    d = ' '.join(eachname.string.split()) + '\n'
    print d
    myfile.write(d)
美丽的群星

>>来自bs4导入组
>>>美丽之路(“神圣之路!”)
圣杯

那不是很棒吗?制作汤时,文档将转换为Unicode,HTML实体将转换为Unicode字符!因此,您可以将Unicode对象作为结果。如意算盘。这没什么错

所以你的问题是关于Unicode的。并对Unicode进行了解释。不喜欢录像带?读一篇文章

u
是“以下sting是Unicode编码的”的缩写。您现在可以使用所有Unicode字符,而不是128个ASCII字符。目前超过110.000人。
u
不会保存到文件或数据库中。这是视觉反馈,因此您可以看到您正在处理一个Unicode编码的字符串。像使用普通字符串一样使用它,因为它是普通字符串

这个故事的寓意是:


☺ 当您看到一个
u'…'
时,BeutifulSoap是一个真正的优秀html解析器。将它最大限度地用于解析html。所以只需修改代码,如下所示

names=[texts.text for texts in soup.findAll('a',{'href':re.compile("dog")})]
这将在锚定选项卡之间进行调整,因此您不需要
d=(str(eachname.string.split())+“\n”

所以最终的代码是

from bs4 import BeautifulSoup
import urllib2
import re
import codecs
url="http://trackinfo.com/entries-race.jsp?raceid=GBR$20140302A01"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
names=[texts.text for texts in soup.findAll('a',{'href':re.compile("dog")})]
myfile = codecs.open("base/dogs.txt","wb",encoding="Utf-8")
for eachname in names:
    eachname=re.sub(r"[\t\n]","",eachname)
    myfile.write(eachname+"\n")
myfile.close()
如果你只是需要它,而文件中没有u,那么 使用
codecs.open()
io.open()
使用适当的文本编码(即
encoding=“…”
)打开文本文件,而不是使用
open()
打开bytefile

那就是

myfile = codecs.open("base/dogs.txt","w+",encoding="Utf-8")
就你而言

文件中的输出将是

BARTSSHESWAYCOOL                            
DK'S SEND ALL                            
SHAKIN THINGS UP                            
FROSTED COOKIE                            
JD EMBELLISH                            
WW CASH N CARRY                            
FREEDOM ROCK                            
HVAC BUTCHIE 

还可以看到我问的这个问题,这个问题与我问的几乎相同

print[str(x.encode('ascii'))for x in d]
?请注意,如果字符串可以包含多字节字符,将其从Unicode字符串更改为ascii字符串实际上会破坏数据。你确定这是你想要做的事情吗?请注意,如果你只是打印字符串——比如说,
print
——或者直接写入字符串(而不是作为对象的一部分,该对象使用
repr()
)将其内容字符串化——它们将显示为文字,不是用
u''
装饰。但是当您打印列表对象时,您将始终看到u。当您打印列表时,会对其中的每个项目调用repr(),而不是str()。但是,该列表也是正确的。打印列表时会调用_ustr,而不是list。_urepr _u()(如果两者都已定义)所以当你飞行时,打印一份清单是不同的。
BARTSSHESWAYCOOL                            
DK'S SEND ALL                            
SHAKIN THINGS UP                            
FROSTED COOKIE                            
JD EMBELLISH                            
WW CASH N CARRY                            
FREEDOM ROCK                            
HVAC BUTCHIE