使用 curl 和 xargs 获取单个站点地图

Using curl and xargs to get individual sitemaps

我正在尝试使用此 curl 命令下载一堆包含产品 url 的 gzip 压缩 xml 站点地图。

它的默认行为是转到 robots.txt 文件,找到包含各个站点地图的所有 url 的站点地图文件,解压缩它们,然后在各个站点地图中找到包含所有单个产品的 url。

我想做的是将每个单独的站点地图(超过 400 个)下载到它自己的文件中,然后在我的本地计算机上操作这些站点地图。

curl -N https://www.example.com/robots.txt |
    sed -n 's/^Sitemap: \(.*\)$//p' |
    sed 's/\r$//g' |
    xargs -n1 curl -N |
    grep -oP '<loc>\K[^<]*' |
    xargs -n1 curl -N |
    gunzip |
    grep -oP '<loc>\K[^<]*' |
    gzip > \
    somefile.txt.gz

现在它将所有数据放在一个文件中——这个文件太大了。我已经尝试了一些这样的事情并最终想出了这个:

curl -N https://www.example.com/robots.txt |
    sed -n 's/^Sitemap: \(.*\)$//p' |
    xargs -n1 curl -N |
    grep -oP '<loc>\K[^<]*' |
    sort > carid-list-of-compressed-sitemaps.txt

效果很好,并为我提供了压缩 xml 站点地图的列表,但我不太清楚如何获取其中包含产品 url 的各个未压缩站点地图。

所以基本上我想下载所有包含单个产品 url 的单个产品站点地图。

使用 2 个步骤。我删除了第一个 sed 命令中的 $,因为 .* 已经匹配到行尾。
我删除了 gzip,我的测试站点不需要它。

caridlist="carid-list-of-compressed-sitemaps.txt"
curl -sN https://www.example.com/robots.txt |
    sed -n 's/^Sitemap: \(.*\)//p' |
    xargs -n1 curl -sN |
    grep -oP '<loc>\K[^<]*' > "${carid-list-of-compressed-sitemaps.txt}" 

filenumber=1
urlinfile=1
while IFS= read -r site_url; do
    curl -sN "${site_url}"|
    grep -oP '<loc>\K[^<]*' > somefile_${filenumber}.txt
    ((urlinfile++))
    if ((urlinfile==10)); then
       ((filenumber++))
       urlinfile=1
    fi
done < "${carid-list-of-compressed-sitemaps.txt}"