学习目的:


  selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的

正式步骤


需求背景:抓取淘宝美食

Step1:流程分析

  • 搜索关键字:利用selenium驱动浏览器搜索关键字,得到查询后的商品列表
  • 分析页码并翻页:得到商品页码数,模拟翻页,得到后续页面的商品列表
  • 分析提取商品内容:利用PyQuery分析源码,解析得到商品列表
  • 存储至MongoDB:将商品列表信息存储到数据库MongoDB

Step2:代码分析

chromedriver 下载:http://chromedriver.storage.googleapis.com/index.html

# -*-  coding:utf-8 -*-
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time
from pyquery import PyQuery as pq
from config_taobao import *
import pymongo ###数据库设置###
client = pymongo.MongoClient(MONGO_URL)
#client后的数据库用[]
db = client[MONGO_DB] #公共参数
driver = webdriver.Chrome()
url = 'https://www.taobao.com'
wait = WebDriverWait(driver, 10) def search():
driver.get(url)
#显式等待参考了官方api文档 http://selenium-python.readthedocs.io/waits.html
searchbox = wait.until(EC.presence_of_element_located((By.ID, "q")))
submit = driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
#下面是测试代码,验证提交按钮是否可用
submit1 = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="J_TSearchForm"]/div[1]/button')))
# print(submit1.text)
#搜索关键字可以设置为用户收入,在公共参数表用Python的input函数
searchbox.send_keys('美食')
submit.click()
#等待页面加载出搜索结果的总页数
total = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@class="total"]')))
#页码加载完成后,获取商品信息
get_products()
return total.text def next_page(page_number): try:
input = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="mainsrp-pager"]/div/div/div/div[2]/input')))
submit = driver.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')#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)
#此处设置等待时间是因为我本地的网速过快,不休眠一下,无法正常点击
time.sleep(3)
submit.click()
time.sleep(3)
#验证输入页页码和高亮页是否匹配
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:
next_page(page_number) def get_products():
#pyquery的用法,我也不是很了解,后续加强学习,现在知道这么用
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().strip()[3:],
'name':item.find('.title').text(),
'shopname':item.find('.shop').text() }
print(product)
save_product_info(product) ##保存信息至MongoDB
def save_product_info(result):
if db[MONGO_Table].insert(result):
print('存储成功') def main():
total = search()
total = int(re.compile('(\d+)').search(total).group(1))
print(total)
for i in range(2,total+1):
next_page(i) if __name__ == '__main__':
main()

配置文件信息:

# -*-  coding:utf-8 -*-

MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_Table = 'product'

学习总结:


  爬虫越来越好玩了,继续学

Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息的更多相关文章

  1. 爬虫实战--使用Selenium模拟浏览器抓取淘宝商品美食信息

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exce ...

  2. 关于爬虫的日常复习(10)—— 实战:使用selenium模拟浏览器爬取淘宝美食

  3. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  4. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

    Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...

  5. Python爬虫实战四之抓取淘宝MM照片

    原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...

  6. 一次Python爬虫的修改,抓取淘宝MM照片

    这篇文章是2016-3-2写的,时隔一年了,淘宝的验证机制也有了改变.代码不一定有效,保留着作为一种代码学习. 崔大哥这有篇>>小白爬虫第一弹之抓取妹子图 不失为学python爬虫的绝佳教 ...

  7. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  8. Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片

    ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇通过做一个PySpider 项目,来理解 Py ...

  9. 芝麻HTTP:Python爬虫实战之抓取淘宝MM照片

    本篇目标 1.抓取淘宝MM的姓名,头像,年龄 2.抓取每一个MM的资料简介以及写真图片 3.把每一个MM的写真图片按照文件夹保存到本地 4.熟悉文件保存的过程 1.URL的格式 在这里我们用到的URL ...

随机推荐

  1. 电脑同时安装了python2和python3后,随意切换版本并使用pip安装

    第一步: python2安装路径下python.exe重命名为python2.exe,python3安装路径下python.exe重命名为python3.exe; 第二步: 分别为python2.ex ...

  2. Mac常用设置备忘

    1.显示隐藏文件 1>命令行方式 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:defaults writ ...

  3. Mysql 5.6主从同步配置

    主从同步,本质是利用数据库日志,将主库数据复制一份到从库,本质上是使用了数据复制技术. 本文概要 主库的基本配置 从库的基本配置 完全同步的步骤 注意事项 工作原理 1. 主库的基本配置 做两件事:启 ...

  4. 07 saltstack生产实例-mysql主从

    1.服务部署 .服务部署 抽象:功能模块 redis 安装.配置.启动 mysql 安装.配置(my.cnf可以统一 目录默认配置可以统一) master: server_id slave: serv ...

  5. EF 批量添加数据

    原文:https://www.cnblogs.com/liuruitao/p/10049191.html 原文:https://www.cnblogs.com/yaopengfei/p/7751545 ...

  6. windows查看服务的状态

    方法一:运行窗口操作 按下win+r键,在运行窗口中输入services.msc,点击[确定]按钮,即可打开服务. 如下图所示: 方法二:按部就班 1)此电脑—右键—管理 2)点击[服务和应用程序]按 ...

  7. java+Word图片上传控件

    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...

  8. jquery文章链接

    好文链接 1.jQuery是js的一个库,封装了js中常用的逻辑: 2.调用jQuery: (1).本地调用,在script标签的src属性里写上jQuery文件的地址. (2).使用CDN调用jQu ...

  9. Python3:Collatz 序列(考拉咨猜想)

    编写一个名为collatz()的函数,它有一个名为number的参数: 如果参数是偶数,那么collatz()就打印出number//2,并返回该值: 如果number是奇数,那么collatz()就 ...

  10. CentOS7 升级Openssl的办法

    1.查看安装的版本 openssl version -a OpenSSL 1.0.2 2.下载 openssl-1.1.1.tar.gz,目前最新是1.1.1,可以通过修改版本号的方式下载最新版本 最 ...