Scraping & Crawling
18142 ワード
他のサイトから情報を取得するにはどうすればいいですか?
既存のWebサイトでは、JSONインポートではなくXML(eXtensible Markup Language)を使用しています.
//XML:확장 가능한 마크업 언어로 이런 식이이었다.
<name> 철수</name>
<title>제목</title>
//JSON
{
name:"철수",
title:"제목"
}
クリップ(Clip)
データ消去(datascraping)は、コンピュータプログラムが他のプログラムから入力した人間の読み取り可能な出力からデータを抽出する方法である.Wiki百科事典
必要なWebサイトから情報を抽出し、任意の加工を行うことができます.
Discoに特定のサイトを入力すると、headタグのmetaタグにlogタグが検索され、クリップによって旗竿を使用してインポートされたものもクリップによってインポートされたものと考えられます.
今度は特定のサイトにクリップして持ってきます.
スクリプトの練習
ラベルは、以下の画像に示すように選択されます.
旗竿をダウンロードし、ソースコードを作成してOGラベルを切り取ります.
yarn add cheerio
import axios from "axios";
import cheerio from 'cheerio'
async function createBoardAPI(mydata) {
// 3. 게시글에서 url찾아서 스크래핑
const targetURL = mydata.contents.split(" ").filter( el => el.startsWith("http"))[0]
// 1. 스크래핑
const aaa = await axios.get(targetURL)
// 2. OG골라내기
const $ = cheerio.load(aaa.data)
//each는 cheerio문법으로
$("meta").each((_, el) => {
if ($(el).attr('property')) {
const key = $(el).attr('property').split(":")[1]
const value = $(el).attr('content')
console.log(key, value)
}
})
}
const frontendData = {
title: ":안녕하세요",
contents: "여기 정말 좋은 거 같아요! 한번 꼭 놀러오세요! 여기는 https://www.naver.com 이에요!!"
}
createBoardAPI(frontendData);
結果スクロール
定期的に他のサイトの情報を複数回取得します.実際にはブラウザに接続してデータを取得します.最近はDATAの価値がかなり上がっています.そのため、多くの事件が発生した.ここでは、スクロールイベントについて説明します.
ここはどうですか、イベントをスクロールします。ビットのリンクで見ると、ここではどのようにして遊び人のDATAを好きなように利用して発生したイベントなのか、スクロールするときは許可されているサイトでしかできないので、あまり頻繁に情報を取得しすぎるとサーバーにブロックされる可能性があるので注意が必要です.
robots.txtファイルでスクロール可能な部分を特定できます.
dbでスクロールデータを格納する方法でコードを記述してみます.この時スターバックスのドリンクリストを印刷します.
import puppeteer from 'puppeteer'
import mongoose from 'mongoose'
import { Starbucks } from './models/starbucks.model.js'
mongoose.connect("mongodb://localhost:27017/~~~")
.then(()=>console.log('connected'))
.catch(e=>console.log(e));
async function startCrawling() {
const browser = await puppeteer.launch({
headless: false// false 일 경우 실행 시 웹사이트 확인 가능
});
const page = await browser.newPage()
await page.setViewport({ width: 1280, height: 720 })
await page.goto("https://www.starbucks.co.kr/menu/drink_list.do")
await page.waitForTimeout(1300)
for (let i = 1; i <= 10; i++) {
await page.waitForTimeout(500)
// #container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(2) > ul > li:nth-child(2) > dl > dt > a > img
// #container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(2) > ul > li:nth-child(1) > dl > dt > a > img
const img = await page.$eval(`#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(2) > ul > li:nth-child(${i}) > dl > dt > a > img`, el => el.getAttribute("src"))
const name = await page.$eval(`#container > div.content > div.product_result_wrap.product_result_wrap01 > div > dl > dd:nth-child(2) > div.product_list > dl > dd:nth-child(2) > ul > li:nth-child(${i}) > dl > dd`, el =>el.textContent)
console.log(`이미지: ${img} 이름: ${name}`)
const starbucks = new Starbucks({
name : name,
img : img
})
console.log(starbucks)
await starbucks.save()
}
//browser닫기
await browser.close()
}
startCrawling()
dbがよく保存されているのが見えます.の最後の部分
時間と場所の制限がなくて、コンピュータは私の代わりに私の欲しい情報を得ることができて、これは私に自分が情報化の時代に遅れていないと感じさせます.ちゃんと法律を守って利用しましょう!
Reference
この問題について(Scraping & Crawling), 我々は、より多くの情報をここで見つけました https://velog.io/@antipiebse/Scraping-Crawlingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol