> 웹 프론트엔드 > JS 튜토리얼 > 인형극 크롤러란 무엇입니까? 크롤러 작동 방식

인형극 크롤러란 무엇입니까? 크롤러 작동 방식

青灯夜游
풀어 주다: 2018-11-19 17:58:58
앞으로
3980명이 탐색했습니다.

이 글의 내용은 인형극 크롤러가 무엇인지 소개하기 위한 것인가요? 크롤러의 작동 방식 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

인형사란 무엇인가요?

Crawler네트워크 로봇이라고도 알려져 있습니다. 아마도 당신은 매일 검색 엔진을 사용할 것입니다. 크롤러는 색인 생성을 위해 콘텐츠를 크롤링하는 검색 엔진의 중요한 부분입니다. 요즘에는 빅데이터와 데이터 분석이 매우 인기가 높습니다. 그렇다면 데이터는 어디서 오는 걸까요? 웹 크롤러를 통해 크롤링할 수 있는 것입니다. 그런 다음 웹 크롤러에 대해 설명하겠습니다.

인형극 크롤러란 무엇입니까? 크롤러 작동 방식

크롤러의 작동 원리

그림과 같이 크롤러의 흐름도는 시드 URL을 통해 시작되는 것을 볼 수 있으며, 웹페이지를 다운로드하면 웹페이지의 콘텐츠가 구문 분석됩니다. 동시에 웹페이지의 URL을 저장하고 구문 분석하며, 중복 항목을 제거하고 크롤링 대기 중인 대기열에 추가합니다. 그런 다음 대기열에서 크롤링 대기 중인 다음 URL을 가져오고 위 단계를 반복합니다. 매우 간단하지 않습니까?

폭(BFS) 또는 깊이(DFS) 우선 전략

웹 페이지를 크롤링한 후 크롤링 대기 중인 대기열에서 URL을 선택하여 크롤링할 수도 있다고 위에서 언급했습니다. 그러면 어떻게 선택해야 할까요? 현재 크롤링된 웹페이지에서 URL을 선택해야 합니까, 아니면 현재 URL에서 동일한 수준의 URL을 계속 선택해야 합니까? 여기서 동일 수준 URL은 동일한 웹페이지의 URL을 의미하며 이는 크롤링 전략의 차이입니다.

인형극 크롤러란 무엇입니까? 크롤러 작동 방식

폭 우선 전략(BFS)

폭 우선 전략은 현재 웹 페이지의 URL을 완전히 크롤링한 다음, 현재 웹 페이지의 URL에서 크롤링된 URL을 크롤링하는 것입니다. 위 그림의 관계 다이어그램이 웹 페이지 간의 관계를 나타내는 경우 BFS의 크롤링 전략은 다음과 같습니다. (A->(B,D,F,G)->(C,F));

DFS(깊이 우선 전략)

깊이 우선 전략은 특정 웹페이지를 크롤링한 후 크롤링이 완료될 때까지 웹페이지에서 구문 분석된 URL을 계속해서 크롤링합니다.
(A->B->C->D->E->F->G)

웹페이지 다운로드하기

웹페이지 다운로드는 브라우저에서와 마찬가지로 쉬워 보입니다. 링크에 링크를 입력하는 것과 마찬가지로 다운로드 후 브라우저에 해당 링크가 표시됩니다. 물론 결과는 그리 간단하지 않다.

시뮬레이션 로그인

일부 웹페이지의 경우 웹페이지의 콘텐츠를 보려면 로그인이 필요합니다. 그러면 크롤러는 어떻게 로그인하나요? 실제로 로그인 프로세스는 액세스 자격 증명(쿠키, 토큰...)을 얻는 것입니다

let cookie = '';
let j = request.jar()
async function login() {
    if (cookie) {
        return await Promise.resolve(cookie);
    }
    return await new Promise((resolve, reject) => {
        request.post({
            url: 'url',
            form: {
                m: 'username',
                p: 'password',
            },
            jar: j
        }, function(err, res, body) {
            if (err) {
                reject(err);
                return;
            }
            cookie = j.getCookieString('url');
            resolve(cookie);
        })
    })
}
로그인 후 복사

여기 간단한 밤나무가 있습니다. 로그인하여 쿠키를 얻은 다음 각 요청마다 쿠키를 가져옵니다.

Get 웹 페이지 콘텐츠

일부 웹 페이지의 콘텐츠는 서버 측에서 렌더링됩니다. 데이터를 가져오는 CGI가 없습니다. 그러나 일부 웹 사이트의 콘텐츠는 가져오기가 간단하지 않습니다. .LinkedIn과 같은 웹사이트의 경우 웹페이지의 내용을 얻는 것이 쉽지 않은데, 최종 HTML 구조를 얻기 위해서는 브라우저를 통해 웹페이지를 실행해야 하는데 어떻게 해결해야 할까요? 앞서 브라우저 실행을 언급했는데, 프로그래밍 가능한 브라우저가 있나요? Google Chrome 팀의 오픈 소스 헤드리스 브라우저 프로젝트인 Puppeteer는 헤드리스 브라우저를 사용하여 사용자 액세스를 시뮬레이션하고, 가장 중요한 웹페이지의 콘텐츠를 가져오고, 콘텐츠를 크롤링할 수 있습니다.
Puppeteer를 사용하여 로그인 시뮬레이션

async function login(username, password) {
    const browser = await puppeteer.launch();
    page = await browser.newPage();
    await page.setViewport({
        width: 1400,
        height: 1000
    })
    await page.goto('https://example.cn/login');
    console.log(page.url())
    await page.focus('input[type=text]');
    await page.type(username, { delay: 100 });
    await page.focus('input[type=password]');
    await page.type(password, { delay: 100 });
    await page.$eval("input[type=submit]", el => el.click());
    await page.waitForNavigation();
    return page;
}
로그인 후 복사

login()을 실행한 후 브라우저에 로그인하면 html로 콘텐츠를 가져올 수 있습니다. w Meng도 CGI를 직접 요청할 수 있습니다login()后便能像在浏览器中登录后,便能像浏览器中登录后便能获取html中的内容,当让w哦萌也可以直接请求CGI

async function crawlData(index, data) {
                    let dataUrl = `https://example.cn/company/contacts?count=20&page=${index}&query=&dist=0&cid=${cinfo.cid}&company=${cinfo.encodename}&forcomp=1&searchTokens=&highlight=false&school=&me=&webcname=&webcid=&jsononly=1`;
                    await page.goto(dataUrl);
                    // ...
                }
로그인 후 복사

像有的网站,拉钩,每次爬取的cookie都一样,也能利用无头浏览器取爬取,这样每次就不用每次爬取的时候担心cookie.

写在最后

当然爬虫不仅仅这些,更多的是对网站进行分析,找到合适的爬虫策略。对后关于puppeteerrrreee

좋아요. 일부 웹사이트에서는 쿠키가 크롤링될 때마다 동일하며 헤드리스 브라우저를 사용하여 크롤링할 수도 있으므로 크롤링할 때마다 쿠키에 대해 걱정할 필요가 없습니다. "font-size: 20px;">Written at the end🎜🎜🎜🎜 물론 크롤링은 이러한 것 이상으로 웹사이트를 분석하고 적합한 크롤링 전략을 찾는 것입니다. 마지막으로 puppeteer에 대해서는 프로그래밍이 가능하고 헤드리스 브라우저이며 자동화된 테스트 등에 사용될 수 있기 때문에 크롤러에만 사용할 수 없습니다. 🎜

위 내용은 인형극 크롤러란 무엇입니까? 크롤러 작동 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿