爬蟲分頁信息的獲取(ruby+selenium python+selenium)


 在爬蟲的時候,我們會遇到一些問題,即使獲取到全文的url,但是可能page的連接獲取不完整,就會導致我們爬蟲的時候,比如說爬商品信息,就會拿不完整商品信息。

頁面信息大概有這兩種情況:

第一種:

    1,2,3,4,5,...,next,last

第二種:

    1,2,3,4,5,>

實現語言:ruby or python(提供兩種)

爬蟲工具:selenium

 

先說說第一種情況:我們在當前層的時候可以拿到1,2,3,4,5,next,last對應的page頁面的url,但是...的頁面信息獲取不到,可能這里面有好多頁面,例如所有的頁面可能是1,2,3,4,5,6,7,8,如果這種情況我們就拿不到6,7這兩頁,那怎么辦呢?

首先呢,如果last告訴我們最后一個page頁面的信息,我們可以直接拿last的頁面信息的對應的數字,就是所有的page總數,再提出一個網址page頁面的前綴,我們即可以直接拼湊,來獲取到page的頁面數量,以及page的鏈接,我們來看一個例子:

url:https://www.evesaddiction.com/all-necklaces/213

#ruby實現的代碼
def
get_allpage(driver) #獲取當前所有page頁面對應的li page_mes=driver.find_element(:css,"div.pagination").find_elements(:tag_name,"li") #我們取到所有頁面的數量 total_page_len = page_mes[page_mes.length-1].attribute("outerHTML").scan(/href=\"(.*?)\"/)[0][0].scan(/page=(\d+)/)[0][0] #提取page前面的url信息 #url前綴就是"https://www.evesaddiction.com/all-necklaces/213?" #url后綴就是page=1,2,3,4..total_page_len page_url = page_mes[page_mes.length-1].attribute("outerHTML").scan(/href=\"(.*?)\"/)[0][0].scan(/(.*?)page/)[0][0] #最后將結果返回 return page_url,total_page_len end

 

#python
def
get_allpage(driver): page_mes=driver.find_element_by_css_selector("div.pagination").find_elements_by_tag_name("li") total_page_len=re.findall(r'page=(\d+)',page_mes[len(page_mes)-1].get_attribute("outerHTML"))[0] page_url=re.findall(r'href=\"(.*?)page',page_mes[len(page_mes)-1].get_attribute("outerHTML"))[0] return total_page_len,page_url

 

 

第二種情況,就是要一路點到底,才知道當前的頁面數量

url:https://www.tous.com/us-en/watches/?p=8

當在第八頁的時候是這樣子的

第九頁的時候是這樣子的

 

 我們就用這個箭頭的符號定位獲取,判斷他是否存在來判斷是否我們已經點到最后了,也是實現拼接獲取,前綴是url的前綴信息,后綴是page的頁面

#ruby實現的代碼
def
get_all_page(driver) running=true total_page_len="" page_url="" while running page_mes=driver.find_element(:css,"div.pages").find_elements(:tag_name,"li") begin if page_mes[page_mes.length-1].attribute("outerHTML").scan(/next i-next/)[0][0].length > 0 driver.find_element(:css,"div.pages ol li a.next").click() end rescue total_page_len=page_mes[page_mes.length-1].text page_url=page_mes[page_mes.length-2].attribute("outerHTML").scan(/href=\"(.*?)\"/)[0][0].scan(/(.*?)p=/)[0][0] running = false end
      end
return total_page_len,page_url end

執行結果:然后拼接一下就可以啦

 

#python代碼
def
get_all_page(driver): running=True total_page_len="" page_url="" while running: page_mes=driver.find_element_by_css_selector("div.pages").find_elements_by_tag_name("li") if len(re.findall(r'next i-next',page_mes[len(page_mes)-1].get_attribute("outerHTML")))>0: driver.find_element_by_css_selector("div.pages ol li a.next").click() else: total_page_len=page_mes[len(page_mes)-1].text page_url=re.findall(r'href=\"(.*?)p=',page_mes[len(page_mes)-2].get_attribute("outerHTML"))[0] running=False return total_page_len,page_url

 

獲取頁面的page其實就是 page的url + page id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM