学习目的:


  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. Tomcat启动中文乱码,淇℃伅等

    打开Tomcat根目录下的conf文件夹,打开logging.properties. 把 java.util.logging.ConsoleHandler.encoding = UTF-8 换成 ja ...

  2. (七)zabbix监控nginx

    1.agent端配置 1)nginx编译安装需要加上该选项--with-http_stub_status_module 2)修改nginx配置文件 #vim /usr/local/nginx/conf ...

  3. Java 对象序列化和反序列化 (实现 Serializable 接口)

    序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.  把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放 ...

  4. Acwing-197-阶乘分解(质数)

    链接: https://www.acwing.com/problem/content/199/ 题意: 给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pi 和 c ...

  5. Vue(js框架)

    单页技术应用:页面不会跳转,只是局部刷新,利用的是锚点原理. Vue特点:1)组件化  2)数据驱动 Vue的开始使用: 1)先引入Vue文件,引入方式和jquery类似,可以直接引入 <scr ...

  6. Qbxt AH d4 && day-6

    /* 这两天考试直接呵呵了. 赶脚对qbxt的题目无感. 同时也发现了自己的一些问题. 一些思路题总是自己傻逼的挖个坑跳进去. 这两天场场倒数ORZ. 始终是最弱的.... 然后NOIP光荣三等奖了吧 ...

  7. delphi请求http接口中文乱码问题

    请求http接口的时候参数值是中文乱码: http接口一般都是由java,php以及C#开发而成的,乱码的原因也是由于编码的问题,一般传递数据的都是utf8,然后传递的时候都会urlEcode 那么d ...

  8. delphi请求http接口并上传附件

    实现附件的上传:需要使用TIdMultiPartFormDataStream控件, uses IdMultipartFormData; 例子: procedure TClientForm.Button ...

  9. (70)一篇文章带你熟悉 TCP/IP 协议

    作者:涤生_Woo链接:http://www.jianshu.com/p/9f3e879a4c9c來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 同样的,本文篇幅也比较 ...

  10. ValueError: Cannot assign "\<QuerySet [<Area: China>]\>": "Area.parent" must be a "Area" instance.

    在研究才Django自关联的过程中,在插入数据时爆出如下错误: ValueError: Cannot assign "<QuerySet [<Area: China>]&g ...