정보 사이트를 구축하려고합니다. 방문자에게 특정 페이지에있는 특정 판매자의 모든 거래를 보여줍니다. 첫 페이지에서 헤드 라인을 긁어내어 URL 반복을 배열로 관리했습니다.Rails 및 Nokogiri 사이트의 페이지를 반복하는 방법
내 코드는 각 URL을 가져 와서 스크레이퍼에 붙여넣고, 해당 페이지의 항목을 나열하고, 다음 페이지로 반복하고, 헤드 라인을 긁어내어 최근 완료 목록에 첨부하는 등의 작업을 수행해야합니다. 이 2 페이지에 반복 할이 코드
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
class Entry
def initialize(title)
@title = title
end
attr_reader :title
end
def scrape_mydealz
require 'open-uri'
urlarray = Array.new
# --------------------------------------------------------------- URL erstellen
pagination = '&page=1'
count = [1, 2]
count.each do |i|
base_url = "https://www.mydealz.de/search?q=media+markt"
pagination = "&page=#{i}"
combination = base_url + pagination
urlarray << combination
end
# ---------------------------------------------------------------/URL erstellen
urlarray.each do |test|
doc = Nokogiri::HTML(open("#{test}"))
entries = doc.css('article.thread')
@entriesArray = []
entries.each do |entry|
title = entry.css('a.vwo-thread-title').text
@entriesArray << Entry.new(title)
end
end
render template: 'scrape_mydealz'
end
end
및 2 페이지 만에서 스크랩 결과를 표시
내 컨트롤러는 다음과 같습니다.
결과
여기에서 볼 수 있습니다 : https://mm-scraper-neevoo.c9users.io/
thx Nikita, –
"[mcve]"를 읽으십시오. 우리는 귀하의 코드를 실행하여 문제를 보여줄 수 없습니다. 문제를 설명하는 _minimum_ 코드와이를 복제하는 데 필요한 최소 입력 데이터 및 필요한 출력이 필요합니다. 그것 없이는 우리는 부정확 한 결과를 가져오고 누구에게 도움이되지 않는 상상력의 데이터와 결과를 가져야합니다. 결과에 대한 링크는 우리 또는 다른 사람들이 썩어 빠져서 넌센스 질문을하게 만드는 데 도움이되지 않습니다. 기억하십시오. SO는 토론 목록이 아니며 향후 다른 사람들의 문제를 해결하기위한 온라인 참고서입니다. –
URI를 조작하기 위해 URI 클래스를 사용하는 방법을 배우는 것이 좋습니다. 문제를 일으킬 수있는 코너 케이스를 처리하는 방법을 알고 있습니다. ''{{test} '''하지 마라. 'test'는 이미 문자열이므로 리터럴 문자열에 고정시키고 그것을 삽입하지 않고 사용하십시오. 'pagination = '& page = 1 ''을 정의한 다음''pagination = "& page = # {i}"'; 첫 번째 항목을 삭제하지만 URI를 사용하여 쿼리를 작성하는 방법을 배웁니다. 'entry.css ('a.vwo-thread-title'). text'는''a.vwo-thread-title ''이 여러 개 발견되면 문제를 일으킬 것입니다. 'at (...) .text'는 오직 하나 또는'entry.css (...). map (& : text)'만 있으면 사용하십시오. –