首页 > 解决方案 > 从scrapy中的lst刮掉链接或创建一个循环?

问题描述

我想抓取这个网站:https ://www.racingpost.com/results以获得结果。

我已经有一个爬虫,可以抓取并跟踪结果页面上的链接——但我不能再回到网站上显示的 6 或 7 天。较早的结果可通过“resultsfinder”(可悲的是 java 脚本)获得,较早的比赛的其他来源(如马的形式)也是如此。

我已经尝试学习抓取 java 来获取链接,虽然它很有趣,但我想知道是否没有更简单的方法,因为结果页面地址的设计方式非常方便:

它只是https://www.racingpost.com/results/ + 1990-02-08 或 2021-02-11 或任何其他日期。

所以我认为设计蜘蛛从循环或预定义的链接列表中抓取链接可能更容易。

我如何设计一个在 1990 年 1 月 1 日到现在为止在scrapy 中运行的循环,或者为此创建一个预定义的链接列表更好?

标签: javascrapy

解决方案


在蜘蛛中生成日期并将它们附加到链接中,无需创建预定义的链接列表。

from datetime import date, timedelta

# Initialize variables
start_date = date(1990, 1, 1)
end_date = date.today()
crawl_date = start_date
base_url = "https://www.racingpost.com/results/"
links = []
# Generate the links
while crawl_date <= end_date:
    links.append(base_url + str(crawl_date))
    crawl_date += timedelta(days=1)

然后遍历生成的列表,或者只是从 while 循环中调用 parse 函数,而不是将链接添加到列表中。

示例结果:

>>> links
[
    "https://www.racingpost.com/results/1990-01-01",
    "https://www.racingpost.com/results/1990-01-02",
    "https://www.racingpost.com/results/1990-01-03",
    "https://www.racingpost.com/results/1990-01-04",
    "https://www.racingpost.com/results/1990-01-05",
    ...
]

推荐阅读