【发布时间】:2016-07-04 20:56:10
【问题描述】:
我正在尝试解析来自例如this page 的专利数据。最终输出应该是一个 CSV 文件,每个专利有一行,每行都有(受让人、家族 ID 和申请日期)。 我正在使用 BeautifulSoup,我可以很好地检索大部分信息并编写 CSV 文件。
我的问题是我注意到表格的结构会随着时间而变化;并非所有字段都一直存在。例如。在给出的示例中,没有家庭 ID。 因此,我无法将每个单元格分配给特定变量(例如here)。根据报告的字段数,行/列数也会发生变化。
我想编写代码,使其足够灵活,可以执行以下操作: 如果 header == "Assignee",则从该单元格获取文本。否则,请将其留空。 如果 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()
显然很罗嗦;一旦我确定我理解每一位是如何工作的,我将尝试让代码更高效。
编辑:我认为这是一个让我更接近的替代方案。然而,虽然它适用于“Assignee”,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)
如果我遗漏了一些明显的东西,我们深表歉意。蒂亚!
【问题讨论】:
-
您可以尝试scrapy framework 来完成此类任务。然后使用
xpath功能选择任何 dom 元素会更容易。
标签: python parsing beautifulsoup