Curl 在 URL 文本文件列表中的循环中不起作用

Curl 在 URL 文本文件列表中的循环中不起作用

我有一个包含大约 50 个 URL 的文本文件,我正在尝试卷曲文本文件中的每个 URL,并使用 grep 从 GREP 匹配中输出几行

我无法理解为什么它不起作用,就好像我回显每一行一样,它会正确显示 URL。如果我使用 URL 和 Grep 手动运行 CURL,它就可以工作。但一旦进入循环,它就不会输出任何内容。

while IFS= read -r line
do
echo "$line"
curl -s "$line" | grep "Telephone"
done <  links.txt

输入示例:

https://qguild.co.uk/our-butchers/simpsons-butchers-south-hykeham/
https://qguild.co.uk/our-butchers/simpsons-butchers-spalding/
https://qguild.co.uk/our-butchers/simpsons-butchers-lincoln/
https://qguild.co.uk/our-butchers/simpsons-butchers-2/

示例输出:

curl -s "https://qguild.co.uk/our-butchers/simpsons-butchers-south-hykeham/" | grep "Telephone"

<p>Simpsons Butchers,<br />Pennell`s Garden Centre,<br />Newark Road, South Hykeham, Lincoln, LN6 9NT. Telephone: 01522 695419<br />Monday - Saturday : 8am - 5.30pm Sunday : 10am - 4pm</p>

<p>Pennells Garden Centre, Newark Road, SOUTH HYKEHAM, LINCOLN LN6 9NT</p>                        
<p>Telephone: <a href="tel:01522-695419">01522 695419</a></p>                        <p>Email: <a href="mailto:[email protected]">[email protected]</a></p>                        
<p>Website: <a href="http://gsimpsonbutchers.co.uk/" target="_blank" rel="noopener noreferrer">http://gsimpsonbutchers.co.uk/</a></p>

答案1

使用:

如果您想保留大部分代码:

dos2unix links.txt

然后

while IFS= read -r url; do
     xidel -e '//p[contains(., "Telephone")]/a/text()' -s "$url"
done < links.txt

甚至更短:

xargs < links.txt xidel -e '//p[contains(., "Telephone")]/a/text()' -s

输出

01522 695419
01775 723157
01522 525374
01529 460403

答案2

您的links.txt文件可能是 DOS 或 Windows 文本文件。

因此,每行末尾都会有一个额外的回车符,从而干扰 URL 字符串的末尾。

使用 例如 将 URL 列表转换为 Unix 文本格式dos2unix,然后重试。

答案3

在这里使用输入重定向和while循环可能会使事情变得过于复杂。在这种情况下,使用catandfor循环更简单:

IFS=$(printf "\n")
for line in $(cat links.txt)
do
    echo "$line"
    curl -s "$line" | grep "Telephone"
done

相关内容