利用Selenium爬取淘宝美食网页内容

发表于:2019-8-26 13:39

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

 作者:Python很简单    来源:简书

  开发工具
  Python版本:3.6
  相关模块:
   import re
  from selenium import webdriver
  from selenium.common.exceptions import TimeoutException
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  from pyquery import PyQuery as pq
  from config import *
  config文件
   SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']
  KEYWORD = '美食'
  全部代码
   '''
  遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
  '''
  import re
  from selenium import webdriver
  from selenium.common.exceptions import TimeoutException
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  from pyquery import PyQuery as pq
  from config import *
  driver = webdriver.PhantomJS(service_args=SERVICE_ARGS)
  # driver = webdriver.Chrome()
  wait = WebDriverWait(driver, 10)
  driver.set_window_size(1400,900)            #有这这句话就是可以爬取到网页的内容,没有的话就出现TimeOut错误
  def search():
      print('正在搜索')
      try:
          driver.get('http://www.taobao.com')
          s_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#q')))
          sumbit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button')))
          s_input.send_keys(KEYWORD)
          sumbit.click()
          totle = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total')))
          get_products()
          return totle.text
      except TimeoutException:
          print('TimeOut')
          return search()
  def next_page(page_number):
      print('正在翻页', page_number)
      try:
          s_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
          sumbit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
          s_input.clear()
          s_input.send_keys(page_number)
          sumbit.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 TimeoutException:
          print('TimeOut')
          next_page(page_number)
  def get_products():
      wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item')))
      html = driver.page_source
      doc = pq(html)
      items = doc('#mainsrp-itemlist .items .item').items()
      for item in items:
          product = {
              'image': item.find('.pic .img').attr('src'),
              'price':item.find('.price').text(),
              'deal': item.find('.deal-cnt').text()[:-3],
              'title': item.find('.title').text(),
              'shop': item.find('.shop').text(),
              'location': item.find('.location').text()
   }
          print(product)
  def main():
      try:
          totle = search()
          totle = int(re.compile('(\d+)').search(totle).group(1))
          for num in range(2,totle + 1):
              next_page(num)
      except Exception as e:
          print(e)
      finally:        #最后执行的操作
          driver.close()
  if __name__  == '__main__':
      main()
  
      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号