Python 抓取一个html表格,如何在一个类似的结构信息
我正在尝试创建一个如下所示的html表:Python 抓取一个html表格,如何在一个类似的结构信息,python,python-2.7,web-scraping,beautifulsoup,Python,Python 2.7,Web Scraping,Beautifulsoup,我正在尝试创建一个如下所示的html表: Recent ratings: thew 26-6-2014 11:02 Karma +4 lucky you user34 26-6-2014 10:34 Karma +3 great! godspeed 26-6-2014 06:50 Karma +5 thanks!
Recent ratings:
thew 26-6-2014 11:02 Karma +4 lucky you
user34 26-6-2014 10:34 Karma +3 great!
godspeed 26-6-2014 06:50 Karma +5 thanks!
[Report to Mod.]
thew
ᅡᅠᅡᅠ26-6-2014 11:02ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+4
ᅡᅠᅡᅠlucky you
user34
ᅡᅠᅡᅠ26-6-2014 10:34ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+3
ᅡᅠᅡᅠgreat!
godspeed
ᅡᅠᅡᅠ26-6-2014 06:50ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+5
ᅡᅠᅡᅠthanks!
我使用漂亮的汤,我的代码包括:
five = soup.findAll("fieldset")
for html in five:
text5 = BeautifulSoup(str(html).strip()).get_text().encode("utf-8").replace(" ", "")
karmas.append(text5.split("Recent Ratings")[1].split("[Report to Mod.]")[0].strip())
在csv文件中,结果是一列如下所示:
Recent ratings:
thew 26-6-2014 11:02 Karma +4 lucky you
user34 26-6-2014 10:34 Karma +3 great!
godspeed 26-6-2014 06:50 Karma +5 thanks!
[Report to Mod.]
thew
ᅡᅠᅡᅠ26-6-2014 11:02ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+4
ᅡᅠᅡᅠlucky you
user34
ᅡᅠᅡᅠ26-6-2014 10:34ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+3
ᅡᅠᅡᅠgreat!
godspeed
ᅡᅠᅡᅠ26-6-2014 06:50ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+5
ᅡᅠᅡᅠthanks!
如何在类似于表的结构中分离信息
我尝试添加.replace(“\n”,”),结果是一行中的所有信息:
thewᅡᅠᅡᅠ26-6-2014 11:02ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+4ᅡᅠᅡᅠlucky youuser34ᅡᅠᅡᅠ26-6-2014 10:34ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+3ᅡᅠᅡᅠgreat!godspeedᅡᅠᅡᅠ26-6-2014 06:50ᅡᅠᅡᅠKarmaᅡᅠᅡᅠ+5ᅡᅠᅡᅠthanks!
这是我打印“五”时得到的结果
[<fieldset><legend><a href="misc.php?action=viewratings&tid=50510&pid=502926" title="View Rating Log">Recent Ratings</a></legend><br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td><a href="viewpro.php?uid=21445" target="_blank">thew</a></td>
<td> 26-6-2014 11:02</td><td> Karma</td><td> <b>+4</b></td>
<td> lucky you</td></tr>
<tr><td><a href="viewpro.php?uid=43867" target="_blank">user34</a></td>
<td> 26-6-2014 10:34</td><td> Karma</td><td> <b>+3</b></td>
<td> great!</td></tr>
<tr><td><a href="viewpro.php?uid=68709" target="_blank">godspeed</a></td>
<td> 26-6-2014 06:50</td><td> Karma</td><td> <b>+5</b></td>
<td> thanks!</td></tr>
</table>
</fieldset>]
不要使用
soup.findAll(“字段集”)
在字段集中使用soup.findAll(“tr”)
html=''' <fieldset><legend><a href="misc.php?action=viewratings&tid=50510&pid=502926" title="View Rating Log">Recent Ratings</a></legend><br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td><a href="viewpro.php?uid=21445" target="_blank">thew</a></td>
<td> 26-6-2014 11:02</td><td> Karma</td><td> <b>+4</b></td>
<td> lucky you</td></tr>
<tr><td><a href="viewpro.php?uid=43867" target="_blank">user34</a></td>
<td> 26-6-2014 10:34</td><td> Karma</td><td> <b>+3</b></td>
<td> great!</td></tr>
<tr><td><a href="viewpro.php?uid=68709" target="_blank">godspeed</a></td>
<td> 26-6-2014 06:50</td><td> Karma</td><td> <b>+5</b></td>
<td> thanks!</td></tr>
</table>
</fieldset> '''
from bs4 import BeautifulSoup
import csv
soup=BeautifulSoup(html)
five = soup.findAll("tr")
for i in five:
with open('some.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow([j.text for j in i.findAll('td')])
#output
thew 26-6-2014 11:02 Karma +4 lucky you
user34 26-6-2014 10:34 Karma +3 great!
godspeed 26-6-2014 06:50 Karma +5 thanks!
html=''”
26-6-2014 11:02因果报应+4
你真幸运
26-6-2014 10:34因果报应+3
伟大的
26-6-2014 06:50因果报应+5
谢谢
'''
从bs4导入BeautifulSoup
导入csv
soup=BeautifulSoup(html)
五=汤。芬达尔(“tr”)
对于我来说,五分之一:
以open('some.csv','a')作为f:
writer=csv.writer(f)
writer.writerow([i.findAll('td')中j的j.text)
#输出
thew 26-6-2014 11:02因果报应+4幸运你
用户34 26-6-2014 10:34业力+3伟大!
上帝保佑26-6-2014 06:50因果报应+5谢谢!
如果您能在这里给出five
的输出,就更容易理解了。谢谢您的回复!我刚刚添加了您要求的内容。看起来这会起作用,但仅在这个特定的示例中使用这三个用户?我需要对数千个html文件执行此操作,其中来自不同用户的反馈将不同。代码完全独立于数据。如果html文件具有相同的结构,这应该会对任何文件上的任何数量的用户放弃评论。啊,我明白了,谢谢!如上所述,它在打印时肯定有效。但是,当我尝试将其写入csv时,输出仅为“thew”,即第一个用户的名称——所有内容都被忽略。我已经更新了上面的问题来解释!Sundar,我怎么能把文本转换成csv呢?请查看更新的问题。我希望你能帮忙!谢谢你的帮助,Sundar!