Current section
Files
Jump to
Current section
Files
priv/yml_spider_template.eex
defmodule <%= Map.get(spider, "name") %> do
use Crawly.Spider
@impl Crawly.Spider
def base_url() do
"<%= Map.get(spider, "base_url") %>"
end
@impl Crawly.Spider
def init() do
[start_urls:
[
<%= for url <- Map.get(spider, "start_urls") do %>
"<%= url %>",
<% end %>
]
]
end
@impl Crawly.Spider
def parse_item(response) do
{:ok, document} = Floki.parse_document(response.body)
extracted_items = Enum.map(extract_items(document), fn(item) -> Map.put(item, "url", response.request_url) end)
next_requests = extract_requests(document)
%Crawly.ParsedItem{items: extracted_items, requests: next_requests}
end
def extract_requests(document) do
Crawly.Utils.extract_requests(document, ~s(<%= Poison.encode!( get_in( spider, ["links_to_follow"]) )%>), base_url() )
end
def extract_items(document) do
Crawly.Utils.extract_items(document, ~s(<%= Poison.encode!( get_in( spider, ["fields"]) )%>))
end
end