Selenium入门(三)如何获取京东的商品列表

来源:互联网 发布:舞台灯光编程软件 编辑:程序博客网 时间:2024/05/21 07:14

(最近几天没有更新博客,不是因为偷懒,而是因为每天都在调试代码到很晚,没法更新,不过好消息是基本对Selenium入了门,可以带来不少干货)

延续上篇的话题,仅仅在京东上获得一个产品的价格肯定无法满足胃口,

咱们的目标肯定是将所有商品的所有信息一网打尽,那么如何实现呢,需要两个步骤:

  1. 获取所有商品对应的页面链接
  2. 根据链接载入页面,并提取需要的信息
这篇文章主要讨论如何实现第一个步骤,例如咱们希望把京东上面所有手机的页面爬下来
首先是登录到京东的手机产品页面,如图,
(http://list.jd.com/9987-653-655-0-0-0-0-0-0-0-1-1-1-1-1-72-4137-33.html)

从这张图我们找到两个线索,第一是京东上所有的手机产品有2008个;第二是这2008个产品分布在56页里
于是我们只需要把每一页的手机产品对应的页面链接爬下来,重复56次即可
在代码实现前,先了解下两个额外的知识,请自行百度
  • 字符串的格式化:格式化输出字符串使用%运算符,通用的形式为"格式标记字符串"%要输出的值组
  • XPath语言: 是在 XML 文档中查找信息的语言。可用来在 XML 文档中对元素和属性进行遍历。
from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionimport codecsimport timejd_driver = webdriver.Chrome()f_jd = codecs.open("d:\\jd.txt","w+","utf-8")j = 1while j <= 55:t_begin = time.clock()jd_driver.get("http://list.jd.com/9987-653-655-0-0-0-0-0-0-0-1-1-%s-1-1-72-4137-33.html"%j)t_end = time.clock()print "open url cost:%f"%(t_end-t_begin)t_begin = time.clock()i = 0while 1:try:mb_href_element = jd_driver.find_element_by_xpath("//li[@index='%s']/div/div[@class='p-img']/a"%i)except (NoSuchElementException):breaki += 1mb_href = mb_href_element.get_attribute("href")f_jd.write(mb_href +"\n") t_end = time.clock()print "page %d cost %f"%(j,t_end-t_begin)j += 1jd_driver.quit()f_jd.close()

运行以上的程序,就可以获得所有的手机页面,下一篇文章,将重点介绍如何优化抓取的速度
这里可以先预告一下,程序的瓶颈主要集中在两个地方:
  1. 装载页面的时间。将尝试不同的浏览器以及多线程来提升
  2. XPath查询的时间。由于过多的引入值索引,总是要完全索引,导致查询性能很低

0 0