Python 使用BeautifulSoup解析列并另存为JSON
我想解析网站上的Afk、Aantal和Zetels列:我最终可以将它们保存为JSON文件 在将其保存为json文件之前,我需要解析元素 我有 我试过Python 使用BeautifulSoup解析列并另存为JSON,python,html,json,beautifulsoup,bs4,Python,Html,Json,Beautifulsoup,Bs4,我想解析网站上的Afk、Aantal和Zetels列:我最终可以将它们保存为JSON文件 在将其保存为json文件之前,我需要解析元素 我有 我试过 from bs4 import BeautifulSoup import urllib jaren = [str("2010"), str("2012")] for Jaargetal in jaren: r = urllib.urlopen("http://www.nlverkiezingen.com/TK" + Jaargetal
from bs4 import BeautifulSoup
import urllib
jaren = [str("2010"), str("2012")]
for Jaargetal in jaren:
r = urllib.urlopen("http://www.nlverkiezingen.com/TK" + Jaargetal +".html").read()
soup = BeautifulSoup(r, "html.parser")
tables = soup.find_all("table")
for table in tables:
header = soup.find_all("h1")[0].getText()
print header
for tr in table.find_all("tr"):
firstTd = tr.find("td")
if firstTd and firstTd.has_attr("class") and "l" in firstTd['class']:
tds = tr.find_all("td")
for tr in table.find_all("tr"):
print "|".join([x.get_text().replace('\n','') for x in tr.find_all('td')])
break
我做错了什么,或者我必须做什么,我在正确的轨道上吗?只提取所需列的一个选项是检查列的索引。定义您感兴趣的列索引:
DESIRED_COLUMNS = {1, 2, 5} # it is a set
然后与find_all()
一起使用:
只提取所需列的一个选项是检查列的索引。定义您感兴趣的列索引:
DESIRED_COLUMNS = {1, 2, 5} # it is a set
然后与find_all()
一起使用:
你能指出现有代码到底有什么问题吗?谢谢。@alecxe在第一个代码中,它会打印所有行:Partij | Afk。| Aantal |%|+/-| Zetels我希望代码只打印行:Afk。安塔尔和泽特尔。你能指出现有代码到底出了什么问题吗?谢谢。@alecxe在第一个代码中,它会打印所有行:Partij | Afk。| Aantal |%|+/-| Zetels我希望代码只打印行:Afk。Aantal和Zetels。谢谢@Alecxe还有一个选项,我可以定义一些东西,仅从afk、Aantal和Zetels获取前3行,例如?@Danisk您可以随时切片,例如:
tr.find_all('td')[:3]
谢谢您的帮助!我还有一个简短的问题;这现在起作用了,唯一的一件事是我从2012年和2010年开始刮。2010年比2012年有更多的les行,所以它也刮去了我不想要的内容。有没有选择说。“网站2010中的tr.find_all td[:20]和tr.find_all('tr')[:19]从…起2012@Danisk抱歉之前的评论。我的意思是,你不应该试图限制你提取的行的数量-这是动态部分。感谢@Alecxe还有一个选项,我可以定义一些东西,例如仅从afk、Aantal和Zetels获取前3行吗?@Danisk你可以随时切片,例如:tr.find\u all('td')[:3]
谢谢你的帮助!我还有一个简短的问题;现在这个问题可以解决了,唯一的问题是我正在从2012年和2010年抓取。2010年比2012年有更多的les行,所以它也会抓取我不想要的内容。有没有选择说:“2010年网站上的tr.find_all td[:20]和tr.find_all('tr')[:19]从…起2012@Danisk很抱歉前面的评论。我的意思是,你不应该试图限制你提取的行数-这是动态部分。
"|".join([x.get_text().replace('\n', '')
for index, x in enumerate(tr.find_all('td'))
if index in DESIRED_COLUMNS])