Python 从TBODY中提取TD

Python 从TBODY中提取TD,python,python-3.x,Python,Python 3.x,我如何从tr中提取第一委员会、立法委员会、特设委员会 <tr> <td class="text-center">1</td> <td class="hidden-xs"><a href="/en/anggota/detail/id/1319"><img class="img-responsive" src="/doksigota/photo/1319.jpg"/></a></td> <td&g

我如何从tr中提取第一委员会、立法委员会、特设委员会


<tr>
<td class="text-center">1</td>
<td class="hidden-xs"><a href="/en/anggota/detail/id/1319"><img class="img-responsive" src="/doksigota/photo/1319.jpg"/></a></td>
<td><a href="/en/anggota/detail/id/1319">PROF. DR. BACHTIAR ALY, MA</a><br/>National Democrat Party Faction<br/>ACEH I</td>
<td>Commission I<br/>Legislation Committee<br/>Ad-Hoc Committee</td> </tr


这里有一个完整的解决方案

解决方案 第一步 去拿桌子

#将导出的信息显示为表格
作为pd进口熊猫
#进度条
从TQM导入TQM、TQM_笔记本、tnrange
#阅读HTML页面
从bs4导入BeautifulSoup
#访问网址
导入请求
基本url=http://www.dpr.go.id/en/anggota'
webpage\u response=requests.get(基本url)
webpage=webpage\u response.content
soup=BeautifulSoup(网页“html.parser”)
tbody=汤。查找(“tbody”)
步骤2 迭代表格行元素:
。对于每个表行,提取列并将其保存到
dict
行dict

rows\u dict=dict()
trs=tbody.find_all('tr')
对于TQM_笔记本中的tr(trs,desc='Progress'):
行dict=提取列(tr)
row_dict.update({row_dict['ID']:row_dict})
步骤3 使用熊猫数据框以表格形式显示提取的数据。请注意,您对以下列感兴趣:
['COL\u 2'、'COL\u 3'、'COL\u 4']
。但是,如果您需要从相同的
html
表访问任何其他数据,那么现在您也可以在dataframe
df
中访问这些数据

df=pd.DataFrame(rows\u dict).T
headers=['ID','CANDIDATE','AFFILIATION','COL_1','COL_2','COL_3','COL_4','IMAGE_URL','URL']
df=df[标题]
df.head()
必要的自定义功能:
def extract_列(tr,debug_标志=False):
#headers=['ID','CANDIDATE','AFFILIATION','COL_1','COL_2','COL_3','COL_4','IMAGE_URL','URL']
tds=tr.find_all('td'))
URL=tds[1]。查找('a',href=True)
person=tds[2]。查找('a',href=True)
party=drop\u html\u br\u标记(tds[2].contents.copy())
当事人
committees=drop\u html\u br\u标记(tds[3].contents.copy())
委员会
如果调试_标志:
印刷品(缔约方)
印刷品(委员会)
行_dict={'ID':tds[0]。文本,
“URL”:基本URL+str(URL['href']),
“图像URL”:基本URL+str(URL.find('img')。获取属性列表('src')[0]),
“候选人”:person.text.strip(),
“从属关系”:参与方[1]。如果(参与方长度>1)其他无,则为strip(),
“COL_1”:参与方[2]。如果(参与方长度>2)其他无,
“COL_2”:委员会[0]。如果(委员会长度>0)其他无,
“COL_3”:委员会[1]。如果(委员会长度>1)其他无,
“COL_4”:委员会[2]。如果(委员会长度>2)其他无,
}
返回行目录
def drop_html_br_标记(行):
对于行中的行:
如果['
'中的str(行): #打印(f'{i}') #打印(“{}”。格式(行)) 行。删除(行) 回程线
测试功能:
row\u dict=extract\u columns(trs[2])
排录
输出

{'AFFILIATION': 'National Democrat Party Faction',
 'CANDIDATE': 'PRANANDA SURYA PALOH',
 'COL_1': 'SUMATERA UTARA I',
 'COL_2': 'Commission I',
 'COL_3': 'Committee for Inter-Parliamentary Cooperation',
 'COL_4': None,
 'ID': '3',
 'IMAGE_URL': 'http://www.dpr.go.id/en/anggota/doksigota/photo/1329.jpg',
 'URL': 'http://www.dpr.go.id/en/anggota/en/anggota/detail/id/1329'}
all\u td=soup.find(“tbody”).find\u all(“td”)
print(i.get\u text())
阅读all可以了解它的所有功能。
{'AFFILIATION': 'National Democrat Party Faction',
 'CANDIDATE': 'PRANANDA SURYA PALOH',
 'COL_1': 'SUMATERA UTARA I',
 'COL_2': 'Commission I',
 'COL_3': 'Committee for Inter-Parliamentary Cooperation',
 'COL_4': None,
 'ID': '3',
 'IMAGE_URL': 'http://www.dpr.go.id/en/anggota/doksigota/photo/1329.jpg',
 'URL': 'http://www.dpr.go.id/en/anggota/en/anggota/detail/id/1329'}