gpt4 book ai didi

python - 如何使用scrapy从站点地图中抓取修改日期已更改的url?

转载 作者:行者123 更新时间:2023-12-01 02:23:53 24 4
gpt4 key购买 nike

我正在尝试实现一个增量爬虫,但在这种情况下,我不是匹配 url,而是尝试匹配 sitemap xml 的属性来检查页面是否被修改。现在的问题是我无法找到一种方法来破译我应该在哪里拦截获取站点地图网址的请求,以便我可以添加逻辑以从存储的 <lastmod> 中进行查找。 value 并仅返回那些值被更改的 url。

这是 xml:

<url>
<loc>https://www.example.com/hello?id=1</loc>
<lastmod>2017-12-03</lastmod>
<changefreq>Daily</changefreq>
<priority>1.0</priority>
</url>

站点地图蜘蛛:

class ExampleSpider(SitemapSpider):
name = "example"
allowed_domains = []
sitemap_urls = ["https://www.example.com/sitemaps.xml"]
sitemap_rules = [
('/hello/', 'parse_data')
]

def parse_data(self,response):
pass

我的问题是:是否可以覆盖站点地图 _parse_sitemap功能 ?截至目前,我发现 scrapy 的 sitemap蜘蛛只寻找 <loc>属性。我可以使用 process_request 覆盖它吗就像我们在普通蜘蛛中所做的那样?

最佳答案

如果您需要的只是获取 lastmod 的值,然后抓取每个满足某些条件的 loc 那么这应该可以工作:

import scrapy

class ExampleSpider(scrapy.spiders.CrawlSpider):
name = "example"
start_urls = ["https://www.example.com/sitemaps.xml"]

def parse(self, response):
sitemap = scrapy.selector.XmlXPathSelector(response)
sitemap.register_namespace(
# ns is just a namespace and the second param should be whatever the
# xmlns of your sitemap is
'ns', 'http://www.sitemaps.org/schemas/sitemap/0.9'
)
# this gets you a list of all the "loc" and "last modified" fields.
locsList = sitemap.select('//ns:loc/text()').extract()
lastModifiedList = sitemap.select('//ns:lastmod/text()').extract()

# zip() the 2 lists together
pageList = list(zip(locsList, lastModifiedList))

for page in pageList:
url, lastMod = page
if r.search(r'\/hello\/', url) and lastMod # ... add the rest of your condition for list modified here:
# crawl the url
yield response.follow(url, callback=self.parse_data)

def parse_data(self,response):
pass

关于python - 如何使用scrapy从站点地图中抓取修改日期已更改的url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47628667/

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