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="{"emptyColumns":["privatKategorie","_thumbnail"],"data":[{"name":"<a href=\"\/_rte\/publikation\/35897\">Nutzungsbedingungen<\/a>","name-sort":"nutzungsbedingungen","herausgeber":"Informatikdienst","herausgeber-sort":"informatikdienst","datum":"16.12.2010","datum-sort":"2010-12-16","kategorieId":"publikation","kategorieId-sort":"publikation","privatKategorie":"","privatKategorie-sort":"","_thumbnail":"","_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'])
使用 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="{"emptyColumns":["privatKategorie","_thumbnail"],"data":[{"name":"<a href=\"\/_rte\/publikation\/35897\">Nutzungsbedingungen<\/a>","name-sort":"nutzungsbedingungen","herausgeber":"Informatikdienst","herausgeber-sort":"informatikdienst","datum":"16.12.2010","datum-sort":"2010-12-16","kategorieId":"publikation","kategorieId-sort":"publikation","privatKategorie":"","privatKategorie-sort":"","_thumbnail":"","_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'])