BeautifulSoup4を使われているものとして回答します(コードは全文掲載していただけると助かります)。
まず
python
1item = data.th.string
についてですが
.th
で指定すると一番先頭のものがひとつだけヒットします。
つまり、質問にあげられているhtmlファイルをもとに説明すると、
python
1soup = BeautifulSoup(html, "html.parser")
2
3print(soup.th) # 結果:<th>名前</th>
4print(soup.th.string) # 結果:名前
となります。
thタグの要素をすべて取得するにはfind_all()を利用します。
python
1soup = BeautifulSoup(html, "html.parser")
2
3th_elements = soup.find_all("th")
find_all()で返される値は <class 'bs4.element.ResultSet'> というオブジェクトでリストのように扱うことが出来ます(言い換えるとsoup.th.string
のように直接.stringを使うことは出来ません。)
よって、取得した各要素へアクセスするには
python
1for th_element in th_elements:
2 print(th_element)
とします。
tdタグの要素も同様に取得します。
csvファイルへの書き込みはthとtdの要素を2次元配列にして書き込めばよいです。
以下、サンプルのコードです。
python
1import csv
2
3from bs4 import BeautifulSoup
4
5target = """
6<table class="">
7<tr>
8<th>名前</th>
9<th>年齢</th>
10</tr>
11<tr>
12<td>John</td>
13<td>33</td>
14</tr>
15</table>
16"""
17
18soup = BeautifulSoup(target, "html.parser")
19
20header = [tag.string for tag in soup.find_all("th")]
21content = [tag.string for tag in soup.find_all("td")]
22
23output = [header, content]
24
25with open(file="tmp.csv", mode="w", encoding="utf-8") as f:
26 writer = csv.writer(f, lineterminator='\n')
27 writer.writerows(output)
28
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。