使用 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}"
我正在尝试使用此 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}"