어두운 proxyscrape 로고

리드 "백만장자"가 된 방법

2월-01-20245분 읽기

~ Arya의 웹 스크래핑 이야기 - ProxyScrape 사용자

분명히 말씀드리지만, 저는 ProxyScrape 의 공식 대표자가 아님을 밝힙니다. 하지만 저는 이 서비스의 열렬한 팬이자 고객입니다. 아직 서비스를 이용하고 있지 않으시다면 적극 추천합니다! 다음 의견과 생각은 전적으로 제 개인적인 의견입니다.


"오 $!*^, 말도 안 돼"

디스코 음악과 거친 네온 의상이 유행하던 시절, 대부분의 사람들이 우유 배달만큼이나 트렌디했던 회사가 아직도 80년대의 나쁜 헤어스타일처럼 돌아다니고 있다는 사실에 안타까움을 느끼며 새벽 3시에 중얼거렸던 바로 그 감정이 바로 저에게 있었습니다.

이 회사는 전성기에는 정말 대단한 회사였어요. 전성기에는 누구도 이 회사를 피할 수 없었습니다. 이제 그 이름은 은퇴자 가정에서 향수를 불러일으키며 중얼거릴 뿐입니다.

"옐로페이지."

"이게 왜 중요한가요?"라고 궁금해하실 수도 있습니다. 왜 신경 써야 할까요? 왜 30대 틱톡이 아니고 나머지 절반에 GTA 5를 플레이하는 남자가 있는 건가요?" 웹 스크래핑의 가장 인기 있는 용도 중 하나는 리드 발견 및 생성입니다. 모두가 미친 짓을 하는 자본주의의 원더랜드에서, '반 마름모' 모양의 암호화폐 타임쉐어에 '호들갑'과 '포모'를 떨게 할 사람들을 인터넷에서 찾아내는 것은 당연한 일입니다. 그리고 확실히 말씀드리자면, "피라미드 구조가 아닙니다... 이집트에서 유명한 뾰족한 모양을 하고 있을 뿐입니다."

So, here’s the kicker. One of the absolute gems for B2B lead generation, in my humble opinion, is none other than YellowPages (or Yell for you “chewsday” people). Why? Well, let me break it down:

  1. "부끄러움의 벽": 인터넷 시대를 따라잡지 못한 유물들이 여전히 남아 있습니다. 틱톡 때문에 시작했다가 3개월 만에 문을 닫고 지금은 구글의 비즈니스 디렉토리에 불멸의 존재가 된 SMMA처럼, 할아버지의 사업체는 아마 그곳에서 냉랭하게 지내고 있을 것입니다.

  1. "나는 다른 여자애들과 달라": 새내기 스크래퍼들은 Google 지도가 소규모 비즈니스 리드를 위한 성배라고 믿지만, 현명한 스크래퍼라면 누구나 그것이 헛소리라는 것을 알고 있습니다. 포화 상태이며, 어떤 대머리 남자에게 영감을 받은 14세 소녀가 이러한 비즈니스를 괴롭혀 왔습니다.

  1. "아기에게 사탕을 빼앗는 것과 같다": 옐로페이지와 그 파생 웹사이트는 아무런 보호 장치가 없습니다. 저는 몇 초 안에 그 디렉토리에 있는 모든 업체를 스크랩할 수 있었습니다. 여기서는 수천만 개의 리드에 대해 이야기하고 있습니다.

물론 마케팅 업계에서는 유행어가 아닐 수도 있지만, 그 안에 기회가 있습니다. 다른 사람들이 최신 트렌드를 쫓는 동안, 인터넷의 잊혀진 구석에서 잠재력을 알아보는 현명한 소수가 있습니다. 옐로페이지는 과거의 유물일지 모르지만, 리드 생성의 세계에서는 아직 개발되지 않은 잠재력과 성공으로 가는 로드맵을 가진 유물입니다.

이제 "이런 기회를 어떻게 활용해야 하나요?"라고 질문하실 수도 있습니다. - 함께 한 걸음 한 걸음 따라가다 보면, 이 글이 끝날 무렵에는 네안데르탈인들도 옐로페이지를 스크랩할 수 있게 되길 바랍니다.

다른 웹사이트와 마찬가지로 접근해 보겠습니다. 첫 번째 단계는 웹사이트가 어떻게 작동하는지 파악하는 것입니다. 이를 위해서는 일반적으로 여러분이, 네, 여러분이 중요한 데이터가 있는 곳으로 이동하는 방법을 알아내야 합니다. 아니!*^... 데이터를 찾을 수 없는데 어떻게 데이터를 추출할 수 있을까요?

위에 표시됨: 옐로페이지 캐나다의 랜딩 페이지가 이 게시물의 불행한 희생양이 되었습니다.

위의 랜딩 페이지에서 볼 수 있듯이 검색어와 위치를 입력하는 두 개의 텍스트 입력란이 있습니다. 이를 입력하고 검색을 해 보겠습니다. '온타리오주 토론토'에서 '치과'를 검색하겠습니다.

위에 표시됨: 옐로페이지 캐나다의 목록 결과 페이지.

ABC를 파악하고 이를 입력한 후 검색 버튼을 찾아 클릭하면(인상적이었습니다) 위와 같은 페이지로 리디렉션되며 다음과 같은 경로가 있습니다:

/검색/시/1/치과의사/토론토+온

다음과 같은 경로 구조를 추론할 수 있습니다(나중에 유용하게 사용할 수 있습니다):


/검색/시/[페이지 번호]/[검색어]/[지역]+[지역 코드]

또 한 가지 주목할 점은 우리가 원하는 데이터, 즉 비즈니스 목록을 이미 찾았다는 것입니다. 이 비즈니스 목록이 어디에서 로드되는지 파악해 보겠습니다. 문서 내에서 전송되거나 API 엔드포인트에서 가져와야 합니다(또는 불안정한 경우, 제가 본 적이 있는 웹소켓을 믿으세요).

위와 같습니다: 페이지에서 시작된 가져오기/XHR 요청. (스포일러: 데이터는 이 중 어느 곳에도 없습니다.)

위에 표시됩니다: 문서 내 비즈니스 목록. (실제로 데이터는 문서 내에 있었습니다.)

API 요청을 샅샅이 훑어보며 데이터를 찾았지만 소용없다는 것이 증명되었습니다. 그런 다음 HTML로 관심을 돌렸습니다. "10년 넘게 디지털 환경을 탐색"한 결과, 페이지의 빠른 응답성 덕분에 데이터가 문서 안에 있다는 것을 본능적으로 알 수 있었습니다.

하지만 현실을 직시하자. 전화번호부 회사로서 관련성, 더 중요하게는 수익을 필사적으로 추구하는 YellowPages의 지위를 고려할 때 최첨단 기술 스택을 과시할 가능성은 거의 없습니다. 이력서에 React 기반 할 일 앱이 50개나 있다고 과시하는 개발자를 채용할 가능성은 거의 없습니다. 그렇다면 웹페이지가 정적이라는 사실이 정말 충격적일까요?

그럼에도 불구하고 페이지 내의 목록은 "div.resultList" 선택기를 사용하여 추출할 수 있는 div 안에 포함되어 있습니다. 앞서 언급한 요소 내에 편리하게 중첩된 각 개별 목록은 셀렉터를 사용하여 추출할 수 있습니다. div[itemtype="http://schema.org/LocalBusiness] 

이 수준의 세분성을 넘어서는 데이터를 개별적으로 추출하는 방법은 여러분에게 맡기겠습니다. "itemprop" 속성을 사용하면 프로세스가 훨씬 쉬워집니다.

이제 추출을 자동화합니다: URL(앞서 설명한 경로 구조를 기억하세요)을 사용하여 결과를 페이지 매김하고 빈 페이지에 도달할 때까지 각 페이지에서 요소와 데이터를 추출해야 합니다. 저는 개인적으로 이 프로젝트에 Rust를 사용하기로 결정했는데, 속도가 빠르고 병렬화가 쉬우며(곧 중요해질 것입니다), "reqwest" 및 "select" 상자를 활용하여 무거운 작업을 처리할 수 있기 때문입니다. 사용자 에이전트를 교체하고, 리퍼러를 올바르게 설정하고, 프록시를 사용하고, 디도스 공격을 하지 않는 것을 잊지 말라는 몇 가지 프로 팁을 알려드립니다.

위에 표시됨: 옐로페이지의 빈 결과 페이지.

Your script should be good to go now. But how can we elevate this even further? Let’s put our singular combined brain cell to work and ponder… “Do we need to sequentially request each page?” Absolutely not. YellowPages makes it remarkably easy for us to parallelize this process by providing the number of pages available for the query – hint, hint, wink, wink.

위에 표시됨: 결과 페이지 하단의 옐로페이지 페이지 수입니다.

하지만 이 병렬화 전략에는 한 가지 주의할 점이 있습니다: 옐로페이지는 60페이지 이상의 결과가 존재한다고 표시할 수 있지만, 결과에서 60페이지를 초과하는 페이지에 액세스하려고 시도하면 렌더링되지 않습니다. 따라서 병렬화의 하드 캡을 60으로 설정하세요. 적절한 대역폭과 컴퓨팅 성능을 가정할 때 모든 결과 페이지는 순차 모델 내에서 한 페이지를 스크랩하는 데 걸리는 시간과 동일한 시간에 스크랩되어야 합니다.

위 그림과 같습니다: 추출된 옐로페이지 목록 데이터의 예시입니다.

클릭 미끼가 아닌지 궁금하실 수도 있습니다. "백만장자"가 이 모든 것과 무슨 관련이 있을까요? 이 글을 읽으셨고 이제 기능적인 스크립트를 가지고 있다면, 이론적으로 캐나다의 모든 도시를 반복하고 해당 도시 내 쿼리에서 옐로페이지의 모든 비즈니스 목록을 가져오는 데 아무런 문제가 없다는 것을 개인적으로 증명할 수 있을 수도 있고 없을 수도 있습니다. 이 데이터는 적절히 보강하면 말 그대로 수백만 달러의 가치를 지닐 수 있지만, 이제 여러분의 손이 닿을 수 있는 디렉토리 내의 비즈니스도 수백만 개에 달합니다.

옐로페이지는 과거 시대의 추억을 떠올리게 하지만, B2B 리드 생성의 잠재력은 디지털 환경에서 숨겨진 보물창고로 남아 있습니다. 정적인 웹 인터페이스의 단점을 탐색하여 구식으로 보이는 이 플랫폼에서 데이터를 스크랩하면 방대한 비즈니스 리드를 발견할 수 있습니다. 간과되고 활용도가 낮은 옐로페이지의 특성은 이를 특별한 기회로 만들어 줍니다.

이 블로그 포스팅을 통해 "진짜 보물은 그 과정에서 만난 친구들이었다"라는 생각이 들지 않기를 바랄 뿐입니다. 많은 사람들이 당연하게 여기는 기술에만 존재하는 특별한 기회를 보여주고, 이 분야에 경험이 있는 분들에게는 흥미로운 읽을거리가 되고, 그렇지 않은 분들에게는 통찰력을 줄 수 있기를 바랍니다.

항상 그렇듯이 안전을 유지하고, 보호 장치를 사용하며, 제발... FBI가 쫓아오는 일을 하지 마세요. 이 경우에는 RCMP가 될 것입니다.

위 그림: 캐나다의 FBI에 해당하는 RCMP.