Многопоточный парсер html в одну строку
Один дровейщик в чате спросил, чем можно спарсить заголовки у кучи сайтов, на коленке родилось такое:
1 |
cat links.txt | xargs -P 2 -n1 -I % sh -c "curl --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Firefox/24.0' % -s | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'" |
где links.txt — файл с линками (1 в строку),
-P 2 — количество потоков.
Чтобы перенаправить результат в файл, в самый конец добавить >> result.txt.
Юзерагент подставьте свой.
На bsd может не работать (а может и работать, давно не юзал тамошние утилиты).
Update:
На некоторых системах могут быть проблемы с кодировкой (привет, убогая 1251).
В таком случае достаточно добавить enconv перед sed:
1 |
cat links.txt | xargs -P 2 -n1 -I % sh -c "curl --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Firefox/24.0' % -s |enconv| sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'" |
или убрать упоминание локали для sed:
1 |
cat links.txt | xargs -P 2 -n1 -I % sh -c "curl --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Firefox/24.0' % -s | LANG= sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'" |
Оставить комментарий