使用selenium爬取淘宝美食

发表于:2017-8-11 11:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Viljw    来源:博客

  Selenium 是一个web自动化测试工具。简单的说就是一个可以用代码操所浏览器的工具,我们可以通过selenium进行搜索关键字,点击按钮等等操作。
  下面对其进行介绍:
  安装selenium
  首先,在Windows命令提示符(cmd)/ Linux终端输入:
  确保pip命令可用,如果提示pip不是内部或外部命令,需要将pip的安装目录(如:C:\Python36\Scripts)添加到环境变量PATH中。
  接下来通过pip命令安装selenium:
  安装完成后,打开一款Python编辑器,默认Python自带的IDLE也行。创建 baidu.py文件,输入以下内容:
  如果执行出错,我们就要下载浏览器驱动。
  下载浏览器驱动
  当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。
  各浏览器下载地址:
  Firefox浏览器驱动:geckodriver
  Chrome浏览器驱动:chromedriver
  IE浏览器驱动:IEDriverServer
  Edge浏览器驱动:MicrosoftWebDriver
  Opera浏览器驱动:operadriver
  PhantomJS浏览器驱动:phantomjs
  注:部分浏览器驱动地址需要科学上网。
  设置浏览器驱动
  设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
  我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“C:\driver”目录添加到Path的值中。
  ?Path
  ?;C:\driver
  然后验证不同的浏览器驱动是否正常使用:
  环境搭建好了,接下来开始爬取。
  爬取淘宝美食
  首先来到淘宝网,搜索美食
  淘宝美食
  可以看到,每个页面有很多商品,我们想通过点击下一页或者输入页面数进入下一页,不断从页面爬取到商品信息。
  搜素关键字进入页面
  代码如下:
  from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium import webdriver
  browser_chrome = webdriver.Chrome()
  wait = WebDriverWait(browser_chrome, 10)
  def search_keywrd_return_pagenum(keyword='美食'):
      browser_chrome.get('https://www.taobao.com')
      try:
          # 判断输入框是否加载出来
          input_box = wait.until(
              EC.presence_of_element_located((By.CSS_SELECTOR, "#q"))
          )
          # 判断搜索按钮是否存在
          submit = wait.until(
              EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button"))
          )
          # 在输入框输入关键字
          input_box.send_keys(keyword)
          # 点击搜索按钮
          submit.click()
          # 判断页面总数是否加载出来
          total = wait.until(
              EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.total"))
          )
          # 返回页数
          return total.text
      except TimeoutError:
          # 超时就重新搜索
          return search()
  运行结果:
  如图,程序运行后自动搜索到美食页面,下面实现翻页。
  翻页
  代码如下:
  def next_page(page_number):
      try:
          input_box = wait.until(
                  EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input"))
              )
          submit = wait.until(
              EC.element_to_be_clickable((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit"))
          )
          # 清除输入框内容
          input_box.clear()
          input_box.send_keys(page_number)
          submit.click()
          wait.until(
              EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > ul > li.item.active > span"),str(page_number))
          )
          get_products()
      except TimeoutError:
          next(page_number)
  运行结果:
  现在,你的程序已经可以自动翻页了
  提取信息
  接下来,你可以用之前学过的正则表达式,BeautifulSoup等工具提取每个页面的商品信息,对现在的你而言,应该是小菜一碟,这里就不再说明了。
  输出提取的信息
  存储信息
  上面我们只是输出了提取到的商品信息,为了方便以后分析使用,我们可以把它们存储到数据库中。
  比如MongoDB,当然还可以是任何你想要使用的其他数据库。
  以上。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号