此代码搜索网站html文件并提取域名列表...
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo '[[:alnum:]-]+\.(com|net|org)'
结果如下所示。
我计划在非常大的网站上使用此代码,因此这将生成一个非常大的域名列表。此外,上面的代码生成了许多重复的域名。因此,我设置了一个具有唯一字段的mysql数据库,因此不会插入重复项。
利用我有限的编程知识,我在下面将这一行一起攻击,但这不起作用。当我执行命令时,我没有得到任何错误,只是一个新的命令提示符>和一个闪烁的光标。我假设我没有使用正确的语法或方法,和/或可能通过命令行无法实现我想做的事情。非常感谢任何帮助。
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | domain=“$(grep -iEo '[[:alnum:]-]+\.(com|net|org)’)” | mysql -pPASSWORD -e "INSERT INTO domains.domains (domains) VALUES ($domain)”
是的,我的数据库名称是域名,我的表名是域名,我的字段名称是域名。
答案 0 :(得分:0)
从INSERT的MySQL语法判断:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,…)]
[(col_name,…)]
{VALUES | VALUE} ({expr | DEFAULT},…),(…),…
…
您需要将域名转换为带括号,带引号,逗号分隔的项目:
('domain1.com'),('domain2.com'),…
然后将此列表附加到您生成的INSERT语句的末尾。
httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" |
grep -iEo '[[:alnum:]-]+\.(com|net|org)’ |
sort -u |
sed -e "s/.*/,('&')/" -e '1s/,/INSERT IGNORE INTO domains.domains(domain) VALUES /' |
mysql -pPASSWORD
sort -u
确保名称是唯一的。第一个-e
到sed
会将一行(例如domain1.com
)的内容转换为,('domain1.com)
;第二个-e
删除第一行的逗号(由第一个-e
添加),并将其替换为INSERT
前缀。 IGNORE
语句中的INSERT
表示如果某个域已经在表中,则新条目将被忽略。
显然,如果生成的域数对于MySQL中的有效SQL语句来说太大,那么您必须对数据进行一些拆分,但是您很可能能够处理一些一次千个域名。