たとえば、this pageの特許データを解析しようとしています。最終出力は、1行につき1行、各行に(譲受人、家族ID、出願日)CSVファイルでなければなりません。 私はBeautifulSoupを使用しています。私は大部分の情報を取得し、CSVファイルを作成しています。テーブルから特定のセルの内容を取得する
私の問題は、テーブルの構造が時間の経過と共に変化することに気付いたことです。すべてのフィールドが常にそこにあるわけではありません。例えば。与えられた例では、ファミリーIDはありません。 したがって、各セルに特定の変数(hereなど)を割り当てることはできません。レポートされるフィールドの数に応じて、行数/列数も変更されます。
次のような柔軟性があるようにコードを記述したいと思います。 ヘッダー== "担当者"の場合、そのセルからテキストを取得します。それ以外の場合は空白のままにします。 header == "Family ID"の場合、そのセルからテキストを取得します。それ以外の場合は空白のままにします。
最終出力はと類似になるように:
Assignee, Family ID, filing date
"Potomac Aviation", , "June 11, 2002"
"Anonymous Co", 40432687, "June 5, 2016"
etc.
このコードでは、最も近い私を得たものですが、私はこれまで私が終わるする場所からまだです。
fourth_table=table.find_next("table")
header_1 = fourth_table.find('th')
if header_1.get_text() == "Inventors:":
inventors=fourth_table.find('td').get_text()
header1=fourth_table.th
header_2 = header1.find_next('th')
cell1=fourth_table.td
cell2=cell1.find_next('td')
if header_2.get_text() == "Applicant:":
applicant= cell2.find('td').get_text()
これは明らかに非常に曖昧です。すべてのビットがどのように動作するかを理解したら、コードをより効率的にしようとします。
編集:これは私がもっと近づくと思う選択肢です。しかし、それは "譲受人"のためにすべて正常に動作しますが、pythonはprint(family_id)行に "None"を返します。私はスペルをチェックした。
fourth_table=table.find_next("table")
assignee=fourth_table.find(text="Assignee:").findNext('td').get_text().replace("\n","").strip()
#family_id=fourth_table.find(text="Family ID:").findNext('td').get_text().replace("\n","").strip()
family_id=fourth_table.find(text="Family ID:")
print(family_id)
私には明らかなものがありません。 TIA!
あなたは[scrapy framework](http://doc.scrapy.org/en/1.1/intro/overview.html)をそのような種類の仕事。次に、 'xpath'機能を使ってdom要素を選択する方がはるかに簡単です。 – sehrob