我有一个mysql数据库,带有一个表: 网址|字
数据就像,例如:
------Column URL------- -------Column Words------
www.firstwebsite.com | hello, hi
www.secondwebsite.com | someword, someotherword
我想循环遍历该表格,以检查该字词是否存在于网址指定的网站内容中。
我有这样的事情:
!/bin/bash
mysql --user=USERNAME --password=PASSWORD DATABASE --skip-column-names -e "SELECT url, keyword FROM things" | while read url keyword; do
content=$(curl -sL $url)
echo $content | egrep -q $keyword
status=$?
if test $status -eq 0 ; then
# Found...
else
# Not found...
fi
done
一个问题:
速度非常慢:如何设置curl来优化每个网站的加载时间,不加载图像,这样的事情?
另外,将这样的东西放在shell脚本中是个好主意,还是创建一个php脚本更好,并用curl调用它?
谢谢!
答案 0 :(得分:0)
目前,如果您的示例中每行有多个关键字,那么您的脚本将无法正常工作。原因是当你将hello, hi
传递给egrep
时,它将在其输入中查找确切的字符串“hello,hi”, not 中的“hello”或“hi” ”。您可以通过将每个关键字列表转换为egrep
兼容的正则表达式sed
来修改此问题,而无需更改数据库中的内容。您还需要从|
的输出中删除mysql
,例如awk
。
curl
无法检索图像。如果查询URL的顺序对您无关紧要,那么您可以通过使整个事件与&
异步来加快速度。
#!/bin/bash
handle_url() {
if curl -sL "$1" | egrep -q "$2"; then
echo 1 # Found...
else
echo 0 # Not found...
fi
}
mysql --user=USERNAME --password=PASSWORD DATABASE --skip-column-names -e "SELECT url, keyword FROM things" | awk -F \| '{ print $1, $2 }' | while read url keywords; do
keywords=$(echo $keywords | sed -e 's/, /|/g;s/^/(/;s/$/)/;')
handle_url "$url" "$keywords" &
done