一部のWebスクレイピング用にこのスクリプトを作成しましたが、機能しません。
初心者だとよく分からないし、エラーも出ないんですよ。
フォローするこれ記事。
#!/bin/bash
n="1"
rm -f tmp_file extractData.csv
# colunas do arquivo CSV
echo "nome;local;acervo" > livrariasevsp.csv
while [ $n -lt 10 ]
do
# exec o curl e salva no arquivo temporario
curl "https://www.estantevirtual.com.br/garimpepor/sebos-e-livreiros/sp?livraria=$n" > tmp_file
# contador "nome"
n=$[$n+1]
# get nome
nome=$(cat tmp_file |grep "class=\"sebo-nome\"" | cut -d'>' -f4 | cut -d'<' -f1)
# get local
local=$(cat tmp_file |grep "class=\"js-sebo-local\"" | grep span | cut -d'>' -f4 | cut -d'<' -f1)
# get acervo
acervo=$(cat tmp_file |grep "class=\"js-sebo-acervo\"" | grep span | cut -d'>' -f4 | cut -d'<' -f1)
# escreve os dados das livrarias no arquivo CSV
echo "$nome;$local;$acervo" >> livrariasevsp.csv
done
答え1
私は通常、HTMLを解析するために正規表現を使用することを擁護しません。しかし、
awk -F'[<>]' '
BEGIN {print "nome;local;acervo"}
$2 ~ /^h2 .*-titulo/ {title = $3}
$2 ~ /^span .*-local/ {city = $3}
$2 ~ /^span .* nlivros=/ {printf "\"%s\";\"%s\";%d\n", title, city, $3}
' tmp_file > livrariasevsp.csv
$[...]
算術拡張の形式は文書化されていません。代わりに使用してください$((...))
。しかし、実際にはこれを行う必要はありません。この試み:
{
echo "nome;local;acervo"
for n in {1..9}; do
url="https://www.estantevirtual.com.br/garimpepor/sebos-e-livreiros/sp?livraria=$n"
awk -F'[<>]' '
$2 ~ /^h2 .*-titulo/ {title = $3}
$2 ~ /^span .*-local/ {city = $3}
$2 ~ /^span .* nlivros=/ {
printf "\"%s\";\"%s\";%d\n", title, city, $3
}
' <( curl --silent "$url" )
done
} > livrariasevsp.csv