Scrapy 直接从数据源中提取动态 Table 数据

Scrapy Extract Dynamic Table Data from Datasource directly

使用 scrapy 我想提取网页上动态 table 中显示的数据。 由于 table 是动态的 - scrapy 对 tbody-tag 的响应 xpath 没有 return 任何数据

In [1]: response.xpath('//table/tbody').getall()
Out[1]: ['<tbody></tbody>']

另一方面,scrapy 对 table-tag 的响应 xpath 实际上已经包含所有数据 - 即使是以结构化的方式:

In [2]: response.xpath('//table').getall()
Out[2]: ['<table class="table icms-dt rs_preserve" cellspacing="0" width="100%" id="publikation" data-webpack-module="datatables" data-entity-type="publikation" data-entities="{&quot;emptyColumns&quot;:[&quot;privatKategorie&quot;,&quot;_thumbnail&quot;],&quot;data&quot;:[{&quot;name&quot;:&quot;&lt;a href=\&quot;\/_rte\/publikation\/35897\&quot;&gt;Nutzungsbedingungen&lt;\/a&gt;&quot;,&quot;name-sort&quot;:&quot;nutzungsbedingungen&quot;,&quot;herausgeber&quot;:&quot;Informatikdienst&quot;,&quot;herausgeber-sort&quot;:&quot;informatikdienst&quot;,&quot;datum&quot;:&quot;16.12.2010&quot;,&quot;datum-sort&quot;:&quot;2010-12-16&quot;,&quot;kategorieId&quot;:&quot;publikation&quot;,&quot;kategorieId-sort&quot;:&quot;publikation&quot;,&quot;privatKategorie&quot;:&quot;&quot;,&quot;privatKategorie-sort&quot;:&quot;&quot;,&quot;_thumbnail&quot;:&quot;&quot;,&quot;_downloadBtn

我想以结构化的方式提取 table 数据 - 例如按行和列。例如,有 BeautifulSoup 的方法吗?非常感谢任何想法和帮助。

table可以用scrapyshell检查如下:

scrapy shell "rapperswil-jona.ch/publikationen"

给你:

import json
raw_data =response.xpath('//table/@data-entities').get()
data = json.loads(raw_data)

数据在 data-entities 属性中。您可以使用上面的 XPath 提取它。这returns一个字符串。

然后可以使用 json.loads().

将此字符串转换为 dict

进一步展开,实际数据在密钥 data 中。如果你访问它,你会得到一个列表。您可以 运行 循环,导出为 CSV,或根据需要进一步处理:

for item in data['data']:
     print(item['name-sort'])