首页 > 解决方案 > 使用 Scrapy 解析日程表

问题描述

我需要从计划中解析项目,将它们的日期和时间存储在项目中。想象一下日历中的周视图:

     | Mon    | Tue    | Wed    | Thr    |
------------------------------------------
8am  | Event1 | Event2 |        | Event3 |
9am  |        | Event4 | Event5 |        |
10am |        |        |        |        |
11am | Event6 |        |        |        |

理想的项目如下所示:

{
    'name': 'Event4',
    'day': 'Tue',
    'time': '9am',
}

HTML 结构是通常的表结构,带有<tr><td>(和<th>用于标题)。注意:该表也可能非常稀疏。

我最好的想法是利用固定数量的列,然后逐行迭代,逐列手动列出.css('td:nth-child(1)')等。这非常难看,而且由于我是 Scrapy 的新手,我真的觉得我做错了。

对此有什么明智的解决方案?

标签: pythonscrapy

解决方案


您可以获得列标题:

headers = response.xpath('//table//th/text()').getall()

接下来迭代每一行:

for row in response.xpath('//table//tr[position() > 1]'):
    index = 0
    for td_value in row.xpath('./td/text()').getall():
        column_name = headers[index]
        index += 1

推荐阅读