gpt4 book ai didi

python - 如果比 Lastmod 日期更新,则抓取 url -Scrapy

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:54 25 4
gpt4 key购买 nike

您好,我只想抓取 lastmod 日期比特定日期新的页面。

例如:仅当 lastmod 为 14/9/2017 或更新版本时才抓取 URL。

我使用此代码来抓取所有页面,但我无法根据 lastmod 日期限制它:

import requests
from scrapy.spiders import SitemapSpider
from urllib.parse import urljoin


class MySpider(SitemapSpider):
name = 'sitemap_spider'
robots_url = 'http://www.example.org/robots.txt'

sitemap_urls = [robots_url]
sitemap_follow = ['products-eg-ar']

def parse(self, response):
print(response.url)

这是我的robots.txt

sitemap: /sitemap-products-eg-ar-index-1-local.xml

sitemap-products-eg-ar-index-1-local.xml 包含:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>/sitemap-products-eg-ar-1.xml</loc>
</sitemap>
<sitemap>
<loc>/sitemaps/sitemap-products-eg-ar-2.xml</loc>
</sitemap>
</sitemapindex>

sitemap-products-eg-ar-2.xml包含:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>/product-8112041/i/</loc>
<priority>0.8</priority>
<lastmod>2017-06-17</lastmod>
<changefreq>daily</changefreq>
</url>
</urset>

最佳答案

这对于标准 SitemapSpider 类来说是不可能的。您必须对其进行子类化并修改其处理 urlset_parse_sitemap 方法。由于此方法在内部使用 sitemap 模块中的 iterloc 函数,因此更脏的解决方案是重新定义该函数以考虑 lastmod 元素。像这样的事情:

import datetime
import scrapy

oldest = datetime.datetime.strptime('2017-09-14', '%Y-%m-%d')

def _iterloc(it, alt=False):
for d in it:
lastmod = datetime.datetime.strptime(d['lastmod'], '%Y-%m-%d')
if lastmod > oldest:
yield d['loc']

# Also consider alternate URLs (xhtml:link rel="alternate")
if alt and 'alternate' in d:
for l in d['alternate']:
yield l

scrapy.spiders.sitemap.iterloc = _iterloc

# your spider code here

关于python - 如果比 Lastmod 日期更新,则抓取 url -Scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com