#使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息
 # 思路:
 # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表
 # 第二步:分析商品页数,驱动浏览器翻页,并得到商品信息
 # 第三步:爬取商品信息
 # 第四步:存储到mongodb
 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 *
 import pymongo

 client = pymongo.MongoClient(MONGO_URL)
 db = client[MONGO_DB]
 # 声明浏览器对象,这里定为Chrome
 # browser = webdriver.Chrome()
 # 声明浏览器对象,可以使用PhanttomJS,这是无界面浏览器,可以设置不加载图片,启用缓存等加快速度
 browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)  # 在配置文件设定参数

 browser.set_window_size(1400, 900)  # 默认的窗口比较小,为避免影响操作需设定

 # 传入搜索关键词并搜索
 # 在这里,需要等待搜索框与搜索按钮加载出来完毕,方可传入关键词,并点击搜索
 wait = WebDriverWait(browser, 10)  # 表示给browser浏览器一个10秒的加载时间

 def search():
     print('正在搜索……')
     try:
         # 驱动浏览器打开网页
         browser.get('https://www.taobao.com/')
         input = wait.until(EC.presence_of_element_located((By.ID, 'q')))  # 表示在规定时间内等待,直到id为q的元素加载出来,注意传入的是元组
         input.send_keys(KEYWORDS)
         # 同样的道理,搜索的按钮也需要等待,直到按钮加载出来,是可以点击的
         button = wait.until(EC.element_to_be_clickable(
             (By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))  # 表示规定时间内,搜索按钮是否是可点击的
         button.click()
         #页面加载完成后,找到总页数
         total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total')))

         get_product()
         return total.text
     except TimeoutException:
         return search()

     # # 得到当前页面的html
     # html = browser.page_source

 def next_page(page_number):
     print('正在翻页……')
     try:
         #等待页码框加载完成
         input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input')))

         #等待确定按钮可点击,然后点击
         button  = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))

         # 清空并输入页码
         input.clear()
         input.send_keys(page_number)

         button.click()

         #检查当前页是否切换 text_to_be_present_in_element 某个元素文本包含某文字
         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_product()
     except TimeoutException:
         next_page(page_number)

 def get_product():
     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist > div')))
     html = browser.page_source
     doc = pq(html)
     lis = doc('#mainsrp-itemlist .items .item').items()
     for item in lis:
         product={
             'title':item.find('.title').text(),#find方法是为了嵌套找出来,防止遗漏
             'price':item.find('.price').text(),
             'deal':item.find('.deal-cnt').text(),
             'shop':item.find('.shop').text(),
             'location':item.find('.location').text(),
             'image':item.find('.pic .img').attr('src')
         }
         print(product)
       #return product #终于找到问题所在了,谨慎使用return啊,因为函数遇到return就会返回!,不再进行循环了 save_to_mongo(product) def save_to_mongo(result): try: if db[MONGO_TABLE].insert(result): print('保存到MONGODB成功',result) except Exception: print('保存到MONGODB失败',result) def main(): try: total = search() total = int(re.compile(r'(\d+)').search(total).group(1))#正则提取页数 for page_number in range(2,total + 1): next_page(page_number) except Exception: print('出错了') finally: browser.close() if __name__=='__main__': main() #配置文件 MONGO_URL = 'localhost' MONGO_DB = 'taobao' MONGO_TABLE = 'product' SERVICE_ARGS =['--disk-cache=true','--load-images=false'] KEYWORDS = '美食'

Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息的更多相关文章

  1. 3.使用Selenium模拟浏览器抓取淘宝商品美食信息

    # 使用selenium+phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏览器翻页,并 ...

  2. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  3. 利用Selenium爬取淘宝商品信息

    一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...

  4. python3编写网络爬虫16-使用selenium 爬取淘宝商品信息

    一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...

  5. <day003>登录+爬取淘宝商品信息+字典用json存储

    任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...

  6. 爬取淘宝商品信息,放到html页面展示

    爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...

  7. 16-使用Selenium模拟浏览器抓取淘宝商品美食信息

    淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...

  8. Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息

    学习目的: selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的 正式步骤 需求背景:抓取淘宝美食 Step1:流程分析 搜索关键字 ...

  9. 使用Selenium模拟浏览器抓取淘宝商品美食信息

    代码: import re from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...

随机推荐

  1. React 组件间通讯

    React 组件间通讯 说 React 组件间通讯之前,我们先来讨论一下 React 组件究竟有多少种层级间的关系.假设我们开发的项目是一个纯 React 的项目,那我们项目应该有如下类似的关系: 父 ...

  2. 简述Java三大特性

    1.面向对象有三大特性,分别是:封装.继承和多态.2.封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private ...

  3. IO流回顾与总结第一篇之字节流与字符流的操作。。。。。

    一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...

  4. Beta No.1

    一.今日任务 重新熟悉整体项目 对整个项目在未来的beta冲刺中进程有一个合理的规划 由于我们送出的是一个负责前端的成员,引入的也是一个负责前端工作的女生,(女生做起美工比起男生更加得心应手吧)所以我 ...

  5. Alpha第四天

    Alpha第四天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  6. 冲刺每日报告--Day1

    敏捷冲刺每日报告--Day1 情况简介 由于李世钰同学出差了,周六才能回来.所以我们只能先写爬虫,封装代码提供接口等他回来调用. 任务进度 赵坤:编写了基本爬虫代码,目前能在国内有版权的B站.爱奇艺中 ...

  7. 同样是IT培训,为什么人家月薪过万,你才几千,问题在哪?!

    听过一句话"360行,行行转IT",虽然有些夸张,但也不难看出IT行业的火爆程度.从李总理提的"互联网+大数据"开始,中国的这场"互联网+" ...

  8. dede使用心得

    Question one: 最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用.所以为了方便教程的发布,特意在网 ...

  9. Spring源码情操陶冶#task:scheduled-tasks解析器

    承接前文Spring源码情操陶冶#task:executor解析器,在前文基础上解析我们常用的spring中的定时任务的节点配置.备注:此文建立在spring的4.2.3.RELEASE版本 附例 S ...

  10. print 函数设置字体颜色

    格式:\033[显示方式;前景色;背景色m数值表示的参数含义:显示方式: 0(默认值).1(高亮).22(非粗体).4(下划线).24(非下划线). 5(闪烁).25(非闪烁).7(反显).27(非反 ...