wget이 모든 페이지 콘텐츠를 검색하지 않습니다.

wget이 모든 페이지 콘텐츠를 검색하지 않습니다.

다음 아티스트를 추출하려고 합니다.이 페이지. 나는 많은 변형을 시도했다

wget https://northside.dk/artister/

그리고

wget --random-wait -r -p -e robots=off -U mozilla https://northside.dk/artister/

하지만 난 단지 얻을 뿐이야

<head>
  <meta charset="UTF-8">

  <meta name="google-site-verification" content="clAYDF67yhmgMMhQ8tcJTXpuo4TGpmHSbo4RyIMu6vY" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <link rel="shortcut icon" href="/img/favicon_43f15e.png">

  <title>NorthSide - 4. - 6. juni 2020</title>

  <script id="CookieConsent" src="https://policy.app.cookieinformation.com/uc.js" type="text/javascript"></script>

  <!-- Google Tag Manager -->
  <script>(function (w, d, s, l, i) {
      w[l] = w[l] || []; w[l].push({
        'gtm.start':
          new Date().getTime(), event: 'gtm.js'
      }); var f = d.getElementsByTagName(s)[0],
        j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
          'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
    })(window, document, 'script', 'dataLayer', 'GTM-K4RZFD');

    if ( typeof "ga" === "function" ) {
      ga('require', 'linker');
    }
    
    if ( typeof "gtag" === "function" ) {
      gtag('config', 'UA-22269830-1', {
        'linker': {
          'domains': ['northside.dk', 'ticketmaster.dk', 'tmmikrobetaling.dk']
        }
      });
    }
  </script>
  <!-- End Google Tag Manager -->
  
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K4RZFD" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->
<link rel="shortcut icon" href="/favicon.png"><script type="text/javascript" src="/main_611e89.js"></script></head>

<body>
  <div id="app-mount">
    <div class="marble-loader" id="loader"></div>
    <h1 id="loading-status">Booking music</h1>
  </div>
</body>

예상되는 출력 대신 Firefox Inspector에서 다음 블록이 표시됩니다.

<a class="archive-grid-item-shell” href="/artister/3447" data-reactid=".0.1.4.1.0.0.0.$3447.1">
  <div class="archive-grid-iten-content" data-reactid=".0.1.4.1.6.0.0.53447.1.0">
    <div class="grid-iten-label” data-reactid=".0.1.4.1.0.8.0.$3447.1.0.0"> w/</div>
    <div class="grid-iten-header’ data-reactid=".0.1.4.1.0.0.0.53447.1.0.1">
      <span class="text-with-background" data-reactid=".0.1.4.1.0.0.0.53447.1.0.1.0">Clara</span>
    </div>
  </div>
</a>

모든 개체가 캡처되는 곳입니다. 헤더리스 브라우저 lynx를 사용해 보았지만 결과는 wget과 동일했습니다.

제가 뭔가 잘못하고 있는 건가요, 아니면 페이지 실행 방식으로 인해 wget을 사용하여 콘텐츠를 가져올 수 없는 건가요?

답변1

이 시도:

wget -q -O - "https://api.northside.dk/wp-json/wp/v2/cpt-artist/?orderby=menu_order&order=asc&per_page=100" | grep -oP '"raw":.*?[^\\]"'
"raw":"Clara"
"raw":"Folkeklubben"
"raw":"Franc Moody"
"raw":"Green Day"
"raw":"Hans Philip"
"raw":"Johnny Marr"
"raw":"Jung"
"raw":"Kashmir"
"raw":"Lukas Graham"
"raw":"Mags"
"raw":"Mekdes"
"raw":"Mew"
"raw":"Robyn"
"raw":"Spleen United"
"raw":"Weezer"
"raw":"White Lies"

업데이트 #1

브라우저에서 개발자 도구를 실행하세요. Chrome에서는 F12를 눌러 실행할 수 있습니다. 그런 다음 웹 북마크를 선택하고 웹사이트 주소를 입력하세요.

이 시점에서 브라우저가 서버로 보낸 모든 요청과 응답을 볼 수 있습니다.

네트워크 트래픽을 추적하면 필요한 데이터 다운로드를 담당하는 요청이 표시됩니다.

각 요청을 선택하여 쿼리 매개변수, 응답, 상태 등을 검사할 수 있습니다.

여기에 이미지 설명을 입력하세요.

답변2

@아무도 말했듯이:

wget은 페이지에 직접 포함된 요소만 가져올 수 있습니다. 분명히 이 페이지는 추가 콘텐츠를 로드하고 이를 페이지에 동적으로 배치하는 JavaScript를 로드합니다. wget은 자바스크립트 코드를 실행할 수 없으므로 페이지가 로드되면 자바스크립트에서 어떤 요소가 로드되는지 확인할 수 없습니다. – 어제는 아무도 없었어요

이 물질은 Python에서 Selenium을 사용하여 성공적으로 추출할 수 있습니다.

관련 정보