Звучит так, будто вы хотите построить что-то полу -автоматическое. Scrapy не подходит для этого, и, как вы говорите, он не может справиться с JavaScript.
Я бы порекомендовал попробовать селен. Он запускает полнофункциональный браузер Chrome и поддерживает сценарии. См. https://selenium-python.readthedocs.io/
. Вы можете остановить сценарий и некоторые события (например, reCAPTCHA), а затем позволить пользователю вступить во владение.
У меня есть служебный сценарий, который просто складывает все столбцы. Обычно достаточно легко захватить то, которое Вы хотите от короткого вывода. В качестве награды некоторые суффиксы SI распознаны.
#!/usr/bin/awk -f
# Sum up numerical values by column (white-space separated)
#
# Usage: $0 [file ...]
#
# stern, 1999-2005
{
for(i = 1; i <= NF; ++i) {
scale = 1
if ($i ~ /[kK]$/) { scale = 1000 }
if ($i ~ /[mM]$/) { scale = 1000*1000 }
if ($i ~ /[gG]$/) { scale = 1000*1000*1000 }
col[i] += scale * $i;
}
if (NF > maxnf) maxnf = NF;
}
END {
for(i = 1; i <= maxnf; ++i) { printf " %.10g", col[i] }
print "";
}
Пример с пользовательским разделителем полей:
$ head /etc/passwd | addcol -F:
0 0 45 39 0 0 0
Я бы попытался построить строку вычисления и передать ее в bc следующим образом:
ipcs -mb | grep -w '^ m' | sed 's /^.* \ s //' | xargs | tr '' + | bc
Похоже, это немного длиннее, чем решение awk , но для всех, кто не может прочитать (и понять) нечетный код awk , это может быть легче понять. ..: -)
Если bc не установлен, вы можете использовать двойные круглые скобки на шаге 5 выше, чтобы вычислить результат:
echo $ (($ (ipcs -mb | grep -w ' ^ m '| sed' s /^.* \ s // '| xargs | tr' '+)))
или SUM = $ (($ (ipcs -mb | grep -w' ^ m '| sed' s /^.* \ s // '| xargs | tr' '+)))
или ((SUM = $ (ipcs -mb | grep -w' ^ m '| sed 's /^.* \ s //' | xargs | tr '' +)))
Интервалы после и перед двойными скобками необязательны.