python webscraping使用BeautifulSoup,为什么我的输出文件以不同的格式打印出三次内容?

2024-06-10 20:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想从这个网站上搜刮法规: http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0001/0001.html

我能够将输出写入txt文件,但是输出输出输出了三种不同的格式,如下所示: https://www.dropbox.com/s/2l41o1eubutwanh/outflieFS.txt?dl=0

我不擅长格式化输出。我的write语句可能有问题吗,或者我哪里做错了?在

我的代码:

from bs4 import BeautifulSoup
import urllib2

f = open('C:\Python27\projects\outflieFS.txt','w')

def First_part(url):
  thepage = urllib2.urlopen(url)
  soupdata = BeautifulSoup(thepage,'html.parser')
  return soupdata


soup = First_part("http://www.leg.state.fl.us/statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0002/0002.html")

tableContents = soup.find('div', {'id': 'statutes' })

for data in tableContents.findAll('div'):
  data = data.text.encode("utf-8","ignore")
  data = str(data)+ "\n\n"
  f.write(data)

f.close()

Tags: txtapphttpdataindexmodehtmlwww
2条回答

我将尝试解释发生了什么,这样您就可以解决这个问题:当您调用find_all时,您可以在内容中规划div的层次结构。因此,如果你有3个级别的div,你将有3个项目作为你的find_all和你的结果(我没有访问你的dropbox,所以我没有看到它)应该是这样的:

div div div content
div div same content
div same content again

因此,解决方案是标识最内部div的类或id,并在find_all上使用它来获得一个级别,即您需要的级别。在

将recursive=False作为find\u all中的参数。find_all方法默认检查标记的所有后代(例如“div”),这会导致结果重复。线将如下所示:

for data in tableContents.findAll('div', recursive=False):

find_all现在将只检查直接后代,即“div”正下方的标记。它将找不到嵌套在这些标记中的标记。在

这样做的结果是find_all将只返回括号中指定的标记的直接子项的结果。在

相关问题 更多 >