python爬虫抓取分页_爬虫分页信息的获取(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实现的代码

defget_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]

#最后将结果返回

returnpage_url,total_page_len

end

#python

defget_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实现的代码

defget_all_page(driver)

running=true

total_page_len=""page_url=""

whilerunning

page_mes=driver.find_element(:css,"div.pages").find_elements(:tag_name,"li")

beginif 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

endreturntotal_page_len,page_url

end

执行结果:然后拼接一下就可以啦

#python代码

defget_all_page(driver):

running=True

total_page_len=""page_url=""

whilerunning:

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=Falsereturn total_page_len,page_url

获取页面的page其实就是 page的url + page id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值