Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息
#使用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模拟浏览器爬取淘宝商品信息的更多相关文章
- 3.使用Selenium模拟浏览器抓取淘宝商品美食信息
# 使用selenium+phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏览器翻页,并 ...
- Selenium模拟浏览器抓取淘宝美食信息
前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...
- 利用Selenium爬取淘宝商品信息
一. Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...
- python3编写网络爬虫16-使用selenium 爬取淘宝商品信息
一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...
- <day003>登录+爬取淘宝商品信息+字典用json存储
任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...
- 爬取淘宝商品信息,放到html页面展示
爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...
- 16-使用Selenium模拟浏览器抓取淘宝商品美食信息
淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...
- Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息
学习目的: selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的 正式步骤 需求背景:抓取淘宝美食 Step1:流程分析 搜索关键字 ...
- 使用Selenium模拟浏览器抓取淘宝商品美食信息
代码: import re from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...
随机推荐
- 数据模型LP32 ILP32 LP64 LLP64 ILP64
各个C++实现所选择采用的基础类型的大小统称为"数据模型".有四种广泛采用的数据模型: 32 位系统: LP32 或 2/4/4(int 为 16-bit,long 和指针为 32 ...
- 源码实现 --> itoa函数实现
itoa函数实现 itoa()函数的功能是将一个整数转换为一个字符串 例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家 ...
- 如何使用maven搭建web项目
博客园注册了有二十多天了,还没有写过博客,今天就发一篇,也便于后面查找笔记. 我个人已经做了几年的java web开发了,由于所在的公司是业务型公司,用的都是一些老旧的稳定技术,很少接触到稍微新点的内 ...
- Android中的layout_gravity和gravity的区别
在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity.按照字面意思来说,layout_gravity就是相对于layout来设置的. ...
- win7开启wifi
在启用本地共享连接时,出现的错误! 我已经建了一个无线临时网络,来启用共享用来上网的!Internet连接共享访问被启用时,出现了一个错误(null)?而且这错误也会在系统日志里留下记录,都是些莫名其 ...
- HTTP协议中PUT和POST使用区别
有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...
- 洛谷 U10783 名字被和谐了
https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...
- 从PRISM开始学WPF(六)MVVM(二)Command?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- WIN7 局域网共享打印机每次电脑重启后必须登录密码重新连接问题修复
第一步,WIN+R(或者开始->附件->运行)输入gpedit或gpedit.msc 进入 第二步:把这几个拒绝的Guest给删除掉,也可以只删除""拒绝从王洛访问这台 ...
- 使用 Vue 和 epub.js 制作电子书阅读器
ePub 简介 ePub 是一种电子书的标准格式,平时我看的电子书大部分是这种格式.在手机上我一般用"多看"阅读 ePub 电子书,在 Windows 上找不到用起来比较顺心的软件 ...