Web Crawler는 스크레이퍼 API의 내장 기능입니다. 대상 URL을 발견하고 관련 컨텐츠를 선택하고 대량으로 전달하는 데 사용되는 도구입니다. 웹 사이트를 실시간으로 크롤링하여 선택한 기준에 따라 필요한 모든 컨텐츠 또는 필요한 데이터 만 신속하게 전달합니다.
웹 크롤러가 할 수있는 세 가지 주요 작업이 있습니다.
URL 발견을 수행하십시오.
사이트의 모든 페이지를 크롤링하십시오.
도메인의 모든 URL을 색인화하십시오.
사이트를 크롤링하고 구문 분석 된 데이터를 대량으로 받고 특정 범주 또는 전체 웹 사이트에서 URL 목록을 수집해야 할 때 사용하십시오.
Web Crawler를 사용할 때 수신 할 수있는 세 가지 데이터 출력 유형이 있습니다 : URL 목록, 구문 분석 결과 및 HTML 파일. 필요한 경우 Web Crawler를 설정하여 결과를 클라우드 스토리지에 업로드 할 수 있습니다.
필터로 너비와 깊이를 조정하여 크롤링 범위를 쉽게 제어 할 수 있습니다. Web Crawler는 또한 지리적 위치 및 사용자 에이전트와 같은 다양한 스크래핑 매개 변수를 사용하여 크롤링 작업의 성공률을 높일 수 있습니다. 이러한 스크래핑 매개 변수의 대부분은 사용하는 스크레이퍼 API에 따라 다릅니다.
크롤링 작업을 제어하려면 다른 엔드 포인트를 사용해야합니다. 작업을 시작하고 중지하고 재개하고 작업 정보를 얻고 결과 청크 목록을 얻고 결과를 얻을 수 있습니다. 다음은이 크롤링 튜토리얼에서 사용할 엔드 포인트입니다. 자세한 내용 및 출력 예를 보려면 문서를 방문하십시오.
종말점 : https://ect.oxylabs.io/v1/jobs
방법 : POST
인증 : Basic
요청 헤더 : Content-Type: application/json
이 엔드 포인트는 작업을 처리하는 동안 발견 된 URL 목록을 제공합니다.
종말점 : https://ect.oxylabs.io/v1/jobs/{id}/sitemap
방법 : GET
인증 : Basic
엔드 포인트 : https://ect.oxylabs.io/v1/jobs/{id}/aggregate
방법 : GET
인증 : Basic
집계 결과는 많은 데이터로 구성 될 수 있으므로 지정한 청크 크기를 기반으로 여러 청크로 분할됩니다. 이 엔드 포인트를 사용하여 청크 파일 목록을 사용할 수 있습니다.
엔드 포인트 : https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
방법 : GET
인증 : Basic
이 엔드 포인트를 사용하면 집계 결과의 특정 덩어리를 다운로드 할 수 있습니다. 응답 본문의 내용은 선택한 출력 유형에 따라 다릅니다.
결과는 다음 중 하나 일 수 있습니다.
인덱스 (URL 목록)
모든 구문 분석 결과가있는 집계 JSON 파일
모든 HTML 결과가있는 집계 JSON 파일
편의를 위해 아래 표에 사용할 수있는 모든 매개 변수를 넣었습니다. 문서에서도 찾을 수 있습니다.
매개 변수 | 설명 | 기본값 |
---|---|---|
URL | 출발점의 URL | - |
filters | 이 매개 변수는 크롤링 작업의 폭과 깊이를 구성하고 최종 결과에 포함되어야하는 URL을 결정하는 데 사용됩니다. 자세한 내용은이 섹션을 참조하십시오. | - |
filters:crawl | Web Crawler가 최종 결과에 포함 할 URL을 지정합니다. 자세한 내용은이 섹션을 참조하십시오. | - |
filters:process | Web Crawler가 긁을지를 지정합니다. 자세한 내용은이 섹션을 참조하십시오. | - |
filters:max_depth | Web Crawler가 따르는 URL 체인의 최대 길이를 결정합니다. 자세한 내용은이 섹션을 참조하십시오. | 1 |
scrape_params | 이 매개 변수는 스크래핑 작업을 수행하는 방식을 미세 조정하는 데 사용됩니다. 예를 들어, 사이트를 크롤링하는 동안 JavaScript를 실행하기를 원하거나 특정 위치에서 프록시를 사용하는 것을 선호 할 수 있습니다. | - |
scrape_params:source | 자세한 내용은이 섹션을 참조하십시오. | - |
scrape_params:geo_location | 결과가 적응 해야하는 지리적 위치. 자세한 내용은이 섹션을 참조하십시오. | - |
scrape_params:user_agent_type | 장치 유형 및 브라우저. 자세한 내용은이 섹션을 참조하십시오. | desktop |
scrape_params:render | JavaScript 렌더링을 활성화합니다. 대상이 컨텐츠를로드하기 위해 JavaScript가 필요할 때 사용하십시오. 이 기능을 사용하려면 매개 변수 값을 HTML로 설정하십시오. 자세한 내용은이 섹션을 참조하십시오. | - |
output:type_ | 출력 유형. Sitemap (크롤링 중에 찾은 URL 목록) 또는 HTML 결과 또는 구문 분석 데이터가 포함 된 집계 파일을 반환 할 수 있습니다. 자세한 내용은이 섹션을 참조하십시오. | - |
upload | 이 매개 변수는 우리가 완료되면 결과를 넣기를 원하는 클라우드 저장 위치를 설명하는 데 사용됩니다. 자세한 내용은이 섹션을 참조하십시오. | - |
upload:storage_type | 클라우드 스토리지 유형을 정의합니다. 유일한 유효한 값은 S3 (AWS S3의 경우)입니다. GCS (Google Cloud Storage의 경우)가 곧 출시 될 예정입니다. | - |
upload:storage_url | 스토리지 버킷 URL. | - |
요청 페이로드로 전달할 수 있으므로 이러한 매개 변수를 사용하는 것은 간단합니다. 아래에서 Python에서 코드 예제를 찾을 수 있습니다.
간단하게하기 위해 Postman을 사용하여 크롤링 요청을 할 수 있습니다. 이 Postman 컬렉션을 다운로드하여 Web Crawler의 모든 엔드 포인트를 시험해보십시오. 다음은 다음과 같은 단계별 비디오 자습서입니다.
웹 사이트를 크롤링하는 방법 : 단계별 가이드
Python에서 HTTP 요청을 만들려면 요청 라이브러리를 사용하겠습니다. 터미널에 다음을 입력하여 설치하십시오.
pip install requests
HTML 결과를 처리하기 위해 BeautifulSoup4 라이브러리를 사용하여 결과를 구문 분석하고 더 읽기 쉽게 만듭니다. 이 단계는 선택 사항이지만이 라이브러리를 다음과 같이 설치할 수 있습니다.
pip install BeautifulSoup4
다음 예에서는 sitemap
매개 변수를 사용하여 Amazon 홈페이지를 기어 다니는 작업을 만들고 시작 페이지에서 찾은 URL 목록을 얻습니다. crawl
및 process
매개 변수가 “.*”
로 설정되면 Web Crawler는 Amazon URL을 따르고 반환합니다. 이 두 매개 변수는 일반 표현식 (Regex)을 사용하여 URL을 크롤링하고 처리 해야하는 URL을 결정합니다. 자세한 내용과 유용한 리소스는 문서를 방문하십시오.
아직 URL에서 컨텐츠를 긁지 않기 때문에 source
매개 변수를 포함 할 필요가 없습니다. json
모듈을 사용하여 데이터를 .json 파일에 작성한 다음 pprint
모듈을 사용하여 구조화 된 컨텐츠를 인쇄합니다. 예를 보자 :
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Crawl all URLs inside the target URL.
payload = {
"url" : "https://www.amazon.com/" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"user_agent_type" : "desktop" ,
},
"output" : {
"type_" : "sitemap"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_sitemap.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
요청 크기에 따라 프로세스에 약간의 시간이 걸릴 수 있습니다. 작업 정보를 확인하여 작업이 완료되었는지 확인할 수 있습니다. 완료되면 Siteemap Endpoint 에 다른 요청을 보내십시오 https://ect.oxylabs.io/v1/jobs/{id}/sitemap
통해 URL 목록을 반환하십시오. 예를 들어:
import requests , json
from pprint import pprint
# Store the JSON response containing URLs (sitemap).
sitemap = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/sitemap' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'sitemap.json' , 'w' ) as f :
json . dump ( sitemap . json (), f )
# Print the decoded JSON response.
pprint ( sitemap . json ())
구문 분석 된 컨텐츠를 얻으려면 parsed
매개 변수를 사용하십시오. 아래 예제를 사용 하여이 Amazon 페이지에있는 모든 URL을 크롤링 한 다음 각 URL의 내용을 구문 분석 할 수 있습니다. 이번에는 지정된 Amazon 페이지에서 컨텐츠를 긁어 내면서 amazon
소스를 사용하고 있습니다. 그래서이 모든 것을 파이썬으로 보자.
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Parse content from the URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "amazon" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "parsed"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_parsed.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
아마존 페이지를 긁을 때 geo_location
매개 변수를 사용하려면 선호하는 위치의 zip/우편 번호로 값을 설정해야합니다. 자세한 내용은 문서 에서이 페이지를 방문하십시오.
작업이 완료되면 요청이 생성 된 청크 수를 확인한 다음이 엔드 포인트로 각 청크에서 컨텐츠를 다운로드 할 수 있습니다 : https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
/ {chunk https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
. 예를 들어, 다음 코드 스 니펫을 사용하면 첫 번째 청크를 인쇄하고 있습니다.
import requests , json
from pprint import pprint
# Store the JSON response containing parsed results.
parsed_results = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'parsed_results_1.json' , 'w' ) as f :
json . dump ( parsed_results . json (), f )
# Print the decoded JSON response.
pprint ( parsed_results . json ())
HTML 결과를 얻는 코드는 이전 섹션의 코드와 크게 다르지 않습니다. 유일한 차이점은 type_
매개 변수를 html
로 설정했다는 것입니다. 코드 샘플을 보자 :
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Index HTML results of URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "universal" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "html"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_html.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
다시, 결과의 각 덩어리를 검색하도록 요청해야합니다. BeautifulSoup4 라이브러리를 사용하여 HTML을 구문 분석하지만이 단계는 선택 사항입니다. 그런 다음 구문 분석 된 내용을 .html 파일에 작성합니다. 아래 코드 예제는 첫 번째 청크에서 컨텐츠를 다운로드합니다.
import requests
from bs4 import BeautifulSoup
# Store the JSON response containing HTML results.
html_response = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Parse the HTML content.
soup = BeautifulSoup ( html_response . content , 'html.parser' )
html_results = soup . prettify ()
# Write the HTML results to an .html file.
with open ( 'html_results.html' , 'w' ) as f :
f . write ( html_results )
# Print the HTML results.
print ( html_results )
요구 사항에 따라 필요에 따라 코드 파일을 수정할 수 있습니다.
이 튜토리얼은 웹 크롤러 사용의 기본 측면을 다루었습니다. 엔드 포인트 및 쿼리 매개 변수 사용에 대한 자세한 내용은 문서를 살펴 보는 것이 좋습니다. 궁금한 점이 있으시면 언제든지 [email protected]로 문의하거나 웹 사이트에서 라이브 채팅을 통해 문의하십시오.