圖片抓取方法和系統的制作方法
【技術領域】
[0001]本發明涉及圖片調度技術,具體涉及一種圖片抓取方法和系統。
【背景技術】
[0002]在日常生活中,圖片抓取技術被越來越廣泛的應用。例如:一些電商網站、團購網站、圖片網站等很多小型網站,由于受到自身網站服務器性能、網站軟件配置等限制,這些小型網站上的圖片在展現時速度較慢,而且展現過程也不穩定,這時,上述網站自身的圖片存儲在第三方的大型的圖片服務器上,所述圖片服務器對圖片進行抓取來解決圖片展現速度慢、展現不穩定的問題。又例如:一些圖片搜索網站或新聞網站等,通過圖片抓取技術來抓取整個互聯網上的大部分圖片,然后對抓取得到的圖片進行分析、過濾,最后進行信息的發布。
[0003]圖片服務器要處理的圖片抓取任務數量是十分巨大的,通常一天要抓取數以億計的圖片。這對圖片服務器的抓取、調度提出了挑戰。現有技術中,圖片服務器接收抓取請求,生成抓取任務,多個服務器之間,以及服務器內部進程之間的任務分發都缺乏調度,個別圖片抓取任務的等待時間過長,導致圖片抓取的效率低下。
【發明內容】
[0004]鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的圖片抓取方法和系統。
[0005]根據本發明的一個方面,提供了一種圖片抓取方法,包括:多個任務服務器的數據接口接收圖片抓取請求;多個任務服務器分別根據各自接收的圖片抓取請求生成圖片抓取任務,并存儲圖片抓取任務;調度服務器從多個任務服務器中獲取圖片抓取任務,將獲取的圖片抓取任務存儲為任務總隊列;調度服務器按預設的規則從任務總隊列中取出圖片抓取任務,分發給多個任務服務器;多個任務服務器根據分發的圖片抓取任務,對圖片進行抓取。
[0006]根據本發明的另一方面,提供了一種圖片抓取系統,包括:包括調度服務器和多個任務服務器;
[0007]其中,任務服務器包括:數據接口模塊,用于接收圖片抓取請求;任務模塊,用于根據接收的圖片抓取請求生成圖片抓取任務,并存儲圖片抓取任務;抓取模塊,用于根據調度服務器分發的圖片抓取任務,對圖片進行抓取;
[0008]調度服務器包括:隊列模塊,用于從所述多個任務服務器中獲取圖片抓取任務,將所述獲取的圖片抓取任務存儲為任務總隊列;調度模塊,用于按預設的規則從所述任務總隊列中取出圖片抓取任務,分發給所述多個任務服務器。
[0009]根據本發明的圖片抓取方法和系統,多個任務服務器各自接收圖片抓取請求,并生成圖片抓取任務,調度服務器將各任務服務器中的圖片抓取任務生成任務總隊列,之后按照預設的規則將所述任務總隊列中的圖片抓取任務在分發給多個任務服務器。根據該方案,將不同任務服務器接收的圖片抓取任務進行統一的調度,這能夠均衡多個任務服務器上的抓取任務,充分利用了系統資源,避免將圖片抓取任務分發至需要等待的任務服務器中,避免了圖片抓取任務擱置或延遲處理,提高了抓取效率,減少了等待時間。
[0010]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的【具體實施方式】。
【附圖說明】
[0011]通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0012]圖1示出了根據本發明一個實施例的圖片抓取方法的流程圖;
[0013]圖2示出了根據本發明另一個實施例的圖片抓取方法的流程圖;
[0014]圖3示出了根據本發明另一個實施例的圖片抓取方法的流程圖;
[0015]圖4示出了根據本發明一個實施例的圖片抓取系統的結構框圖。
【具體實施方式】
[0016]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
[0017]圖1示出了根據本發明一個實施例的圖片抓取方法的流程圖,如圖1所示,該方法包括如下步驟:
[0018]步驟S110,多個任務服務器的數據接口接收圖片抓取請求。
[0019]圖片抓取請求中包括待抓取圖片的信息,例如,待抓取圖片的URL地址等。多個任務服務器之間使用各自的數據接口并行地接收圖片抓取請求,與統一接口接收圖片抓取請求相比,這種并行接收具有較高的容錯率,當某一任務服務器的數據接口不可用時,可由其他任務服務器接收請求。
[0020]步驟S120,多個任務服務器分別根據各自接收的圖片抓取請求生成圖片抓取任務,并存儲圖片抓取任務。
[0021]一個圖片抓取請求中可能生成多個圖片抓取任務,例如,圖片處理請求中包含一個或多個待抓取的圖片的URL地址,則每個圖片的URL對應于一個圖片抓取任務。
[0022]可將生成的圖片抓取任務存儲在一個任務子隊列中。該任務子隊列可以是一個常駐的內存隊列。例如,該任務子隊列可以使用redis實現。redis是一個key-value結構的存儲系統,redis支持存儲的value類型相對較多,包括string(字符串)、list (鏈表)、set (集合)、zset (sorted set—有序集合)和hash (哈希類型)等。任務隊列用于保存待處理的圖片抓取任務。還可以將任務子隊列在磁盤上做持久化,則當任務服務器發生斷電、重啟時,待處理的任務也不會丟失。
[0023]步驟S130,調度服務器從多個任務服務器中獲取圖片抓取任務,將獲取的圖片抓取任務存儲為任務總隊列。
[0024]調度服務器將多個任務服務器生成的任務子隊列進行整合,形成任務總隊列,例如,將不同任務服務器的數據接口接收的圖片抓取請求按接收時間添加到任務總隊列中,采用先進先出的方式從任務總隊列中取出圖片抓取任務。
[0025]步驟S140,調度服務器從任務總隊列中取出圖片抓取任務,按預設的規則分發給多個任務服務器。
[0026]預設規則可以是根據各個任務服務器的空閑狀態,任務數量,處理速度等選定一臺任務服務器,向其分發一個或多個圖片抓取任務。例如,優先將圖片抓取任務分發給進程數量最少的任務服務器。
[0027]通過該步驟,任務服務器上生成的圖片抓取任務被調度服務器重新分發。當該任務服務器無法立即執行根據接收的圖片抓取請求生成的圖片抓取任務時,該圖片抓取任務可被分發至其他任務服務器上執行,因此提高了系統的抓取效率,減少了等待時間。
[0028]步驟S150,多個任務服務器根據分發的圖片抓取任務,對圖片進行抓取。
[0029]多個任務服務器根據圖片抓取任務中的URL地址異步抓取相應的圖片。
[0030]根據本發明上述實施例提供的方法,多個任務服務器各自接收圖片抓取請求,并生成圖片抓取任務,調度服務器將多個任務服務器中的圖片抓取任務整合為任務總隊列,之后按照預設的規則將所述任務總隊列中的圖片抓取任務在分發給多個任務服務器。根據該方案,對不同任務服務器接收的圖片抓取任務進行統一的調度,這能夠均衡多個任務服務器上的抓取任務,充分利用了系統資源,避免將圖片抓取任務分發至需要等待的任務服務器中,避免了圖片抓取任務擱置或延遲處理,提高了抓取效率,減少了等待時間。
[0031]圖2示出了根據本發明另一個實施例的圖片抓取方法的流程圖,如圖2所示,該方法包括如下步驟:
[0032]步驟S210,多個任務服務器的數據接口接收圖片抓取請求。
[0033]步驟S220,多個任務服務器分別根據各自接收的圖片抓取請求生成圖片抓取任務,并存儲所述圖片抓取任務。
[0034]步驟S210-S220的【具體實施方式】可參見上一實施例,此處不再贅述。
[0035]步驟S230,多個任務服務器對生成的圖片抓取任務進行過濾,清除已完成任務和非法任務。
[0036]具體地,可以包括對圖片抓取任務進行校驗等,例如,一些圖片抓取任務信息不全,或者其中包含的URL無效,包含重復的URL等,在該步驟中,將符合上述情況的圖片抓取任務清除。
[0037]步驟S240,調度服務器獲取圖片抓取任務,存儲為任務總隊列。
[0038]在本實施例中,調度服務器獲取的圖片抓取任務除了來自任務服務器外,還包括后續的步驟S2100中重復生成的圖片抓取任務,按照時間順序或任務權重等方式添加到任務總隊列中。
[0039]步驟S250,調度服務器根據任務服務器的空閑信息,從任務總隊列中取出圖片抓取任務,向任務服務器分發。
[0040]具體地,調度服務器根據任務服務器的進程數、最大預設進程數、線程數以及最大預設線程數得出任務服務器的空閑信息。
[0041]例如,多個任務服務器的最大預設進程數不同,則空閑信息可以是進程數與最大預設進程數之差等。
[0042]根據空閑信息進行任務分