wget - wget spider 一个网站收集所有链接
问题描述
我正在尝试将此网站蜘蛛深度 = 2 并收集所有链接(网址)。一个简单的任务,但似乎是不可能的,我一定错过了什么?我没有得到任何网址,只是一个空的文本文件。这是我正在使用的最新命令(我知道很乱):
wget --spider --force-html --span-hosts --user-agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" -np --limit-rate =20k -e robots=off --wait=3 --random-wait -r -l2 https://en.wikibooks.org/wiki/C%2B%2B_Programming 2>&1 | grep '^--' | awk '{ 打印 $3 }' | grep -v '.(css\|js\|png\|gif\|jpg)$' | 排序 | uniq > urls.txt
有任何想法吗?
解决方案
我建议你分两步完成,更好的可读性和更少的混乱。
- 进行爬虫并在日志文件中获取输出。
- 解析日志文件以获取您正在查找的 URL。
对于 #1 -
wget --spider --force-html --span-hosts --user-agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" -np --limit-rate =20k -e robots=off --wait=3 --random-wait -r -l2 https://en.wikibooks.org/wiki/C%2B%2B_Programming -o wget.log &
一旦#1完成,你可以去#2。
对于 #2 -
grep http wget.log | grep -v "[以下]" | awk '{打印 $3}' | grep -vE ".css|.js|.png|.gif|.jpg" | 排序 -u > urls.txt
这将为您提供您正在寻找的东西。
请注意,#1 将下载它找到的所有内容,并且由于您要深入 2 个级别,这可能是大量数据。如果您不想下载所有内容(即,如果您打算使用 urls.txt 下载内容),则可以在 wget 中使用“--delete-after”选项
推荐阅读
- c++ - 模板流运算符重载错误:与 basic_istream 和 basic_ifstream 之间的差异有关的无效引用初始化
- objective-c - 如何运行 dispatch_group?
- javascript - 如何修复未捕获的类型错误:无法读取 null 的属性“addEventListener”(与脚本文件的位置无关......我认为)
- r - 循环遍历表列表并写入 R 中的 csv
- python - Cython“内存高效双向链表”
- c - 使用指针时的意外行为和编译器错误
- python - 如何使用 python 将所有函数和单个函数作为运行时参数执行
- bash - 从 Bash 的 for 循环中写入文件
- c# - 如何使用iText7 c#从pdf中提取图像
- java - 从整数包装类转换为 int 原始类