curl
기본적으로 링크 집합의 끝점을 가져와 각 링크를 다시 (다른 링크 집합에 대해) 재귀적으로 컬링하는 bash 함수가 있습니다 .
task() {
link="$1"
response=$(curl "$link")
# save response data to file...
# process response to find another set of links and save to variable x...
if condition
echo "$x" | while read -r link
task "$link"
}
위 코드는 약 100개의 컬 연산을 생성하는데 시간이 오래 걸립니다. 병목 현상을 일으키는 것은 주로 엔드포인트의 응답 시간(처리 시간이 아님)입니다.
상황
- 링크 수에 대한 정보가 없습니다. 상위 링크를 먼저 사용 하지 않으면
curl
하위 링크를 가질 수 없습니다 . - 각 응답은
curl link
자동으로 파일에 저장되어야 합니다.
이 프로세스를 병렬화하는 것이 가능합니까? 솔루션에 필요한(또는 더 우아한) GNU parallel
다른 외부 도구가 있으면 괜찮습니다.
답변1
너비 우선 스파이더를 템플릿으로 사용할 수 있습니까?https://www.gnu.org/software/parallel/man.html#example-breadth-first-parallel-web-crawler-mirrorer