2017-11-03 9 views
1

私はBeautifulsoupを使ってテーブル要素を変更しています。具体的には、tbodyとtd要素にクラスを追加しています。これはうまく動作しますが、最初に一致する要素に対してのみ有効です。私はページ上の一致する要素の残りの部分を反復処理する方法を理解できません。BeautifulSoup - すべてのHTMLページを反復してクラスに追加する方法​​

soup = BeautifulSoup(combine_html, "html.parser") 
soup.find('tbody')['class'] = 'list' 
soup.find('td')['class'] = 'fuzzy' 
soup 

次の変更が起こる

<tbody> changes to <tbody class="list"> 
The first <td> changes to <td class="fuzzy"> 

~~~更新~~~

私は多分私は私の質問が正しいと掲載されていない、任意の入力が届きませんタグ、または答えが単純なので、誰も投稿されていません。

私はこれを得ることができました - しかし、実際には醜いです。以下のコードを参照してください。

import csv 
import pandas as pd 
# import numpy as np 
from bs4 import BeautifulSoup, Tag, NavigableString 

# Select columns from csv file 
csv_columns = ['Email', 'Recipient Name', 'Department', 'Clicked Link?'] 

# Set input csv file to read from nd specify columns using csv_columns variable 
df = pd.read_csv('camp1_beneficiary_fullcsv.csv', skipinitialspace=True, usecols=csv_columns) 

# Set the HTML header 
# Set Bootstrap CSS 
# Set CSS location for list.min.js Javascript - mainly the list class 
# Set div id for list.min.js 
html_header=""" 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap-theme.min.css"> 
<link rel="stylesheet" href="def.css"> 
<div id="users"> 
    <input class="search" placeholder="Search" /> 
    <button class="sort" data-sort="em"> 
    Sort by name 
    </button> 
""" 
# Set HTML 'footer' 
# Specify list.min.js external javascript file and code 

html_footer =""" 
<script src="list.min.js"></script> 
<script> 
var options = { 
    valueNames: [ 'fuzzy' ] 
}; 
var userList = new List('users', options); 
</script> 

""" 

# Generate HTML body using df.to_html from Pandas 
html_body = df.to_html(classes=["table-bordered", "table-striped", "table-hover"]) 

# Combine html header, body, and footer into variable 
combine_html = (html_header + html_body + html_footer) 

# Find elements in HTML and add classes to support javascript classes for filtering 

soup = BeautifulSoup(combine_html, "html.parser") 
soup.find('tbody')['class'] = 'list' 
soup 

f = open('test.html','w') 
f.write(str(soup)) 
f.close() 

f = open('test.html', 'r') 
filedata = f.read() 
f.close() 

newdata = filedata.replace("<td>", "<td class='fuzzy'>") 

f = open('final.html', 'w') 
f.write(newdata) 
f.close() 

答えて

0

find_allを使用してください。 Hereはドキュメントです。

for td in soup.find_all('td'): 
    td['class'] = "list" 
+0

これは素晴らしい機能でした。ありがとうございました! – KingGlockr

+0

いつでも!それがうまくいった – Shaunak

関連する問題