내 스크립트가 작동하지 않는 이유는 무엇입니까?

내 스크립트가 작동하지 않는 이유는 무엇입니까?

일부 웹 스크래핑을 위해 이 스크립트를 작성했지만 작동하지 않습니다.

초보자라 잘 모르겠고, 에러도 안 나오거든요.

나는 팔로우한다이것기사.

#!/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

관련 정보