0 前言

参考自大神崔庆才《python3网络爬虫开发实战》,以及其博客

1 软件安装

1.1 Selenium的安装

  • Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如输入文字、点击、下拉等操作 。 对于一些 JavaScript 谊染的页面来说,这种抓取方式非常有效 。
  • 使用Anaconda安装:在Anaconda的Environment下搜索Selenium即可安装。

1.2 驱动Chrome浏览器的chromedriver的安装

  • Chromedriver:只有安装 ChromeDriver,才能配合Selenium驱动 Chrome 浏览器完成相应的操作。

  • 第一步,查看Chrome浏览器的版本。

打开Chrome浏览器,选择右上角的菜单栏,选择帮助->关于Google Chrome(G)。如下图,我已更新到版本67.0。

  • 第二步,下载对应版本的Chromedriver。

    百度搜索Chromedriver,即可在镜像网址http://npm.taobao.org/mirrors/chromedriver/中下载对应于Chrome版本的Chromedriver。版本67.0的Chrome可以下载2.40版本的Chromedriver。可以在文件http://npm.taobao.org/mirrors/chromedriver/2.40/notes.txt查看对应Chrome版本的Chromedriver版本。再根据需求下载Chromedriver即可。

  • 第三步,将Chromedriver添加到环境变量中。

    下载解压后,需要把chromedriver.exe文件所在目录添加到环境变量中。这里就不多讲了,百度上有很多教程。

测试时候安装成功:打开cmd,输入chromedriver,回车。出现以下画面即表示安装成功。如若不是,由于重新配置了环境变量,可以重启下电脑,再试一下。

1.3 安装MongoDB和Robo 3T

  • 第一步,去官网https://www.mongodb .com/download-center下载MongoDB,这里选择Community Server即可。

  • 第二步, 将MongoDB配置成系统服务,这样就能在每次需要MongoDB时就自动连接到MongoDBs数据库。

mongod --bind_ip 0.0.0.0 --logpath "C:\Program Files\MongoDB\Server\4.0\logs\mongodb.log"  --logappend --dbpath "C:\Program Files\MongoDB\Server\4.0\data\db" --port 27017 --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install

这里的–bind_ip 0.0.0.0表示连接的地址
–logpath “C:\Program Files\MongoDB\Server\4.0\logs\mongodb.log” –logappend表示指定日志文件
–dbpath “C:\Program Files\MongoDB\Server\4.0\data\db” 表示指定数据库
–port 27017 –serviceName “MongoDB” –serviceDisplayName “MongoDB” 表示指定端口和服务名

  • 第三步,下载MongoDB的可视化操作软件Robo 3T(https://robomongo.org/)

2 开始爬取淘宝美食

2.1 查看淘宝美食站点

2.2 建立taobao_meishi.py,导入相关的库,使用selenium模拟一个Chrome浏览器驱动,并在淘宝网址上搜索美食关键字。

  • selenium的使用可以查看python selenium的官方手册
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
from bs4 import BeautifulSoup
from configure import *
import pymongobrowser = webdriver.Chrome()
wait = WebDriverWait(browser, 10) #等待
keyword = '美食'def search(keyword):'''Desc:模拟搜索关键字keyword,并点击搜索按钮,进行跳转param:keyword -- 搜索用的关键词return:total.text -- 当前关键字下的总页数'''try:print('正在搜索')browser.get('https://www.taobao.com/') #模拟浏览器进入淘宝网#等待直到局部元素显示出来,这里的局部元素为淘宝网页搜索框部分input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))#等待直到元素可被点击,这里的元素为搜索按钮submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))input.send_keys(keyword) #在输入框调用send_keys方法模拟输入关键字submit.click() #模拟点击搜索按钮操作#点击之后,等待页面刷新,这里的条件为直到局部元素显示出来,这里的局部元素为下一页的总页数部分total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')))return total.text#发生延时异常时,重新调用search()方法except TimeoutException:search(keyword)

2.3 用BeautifulSoup解析每一页的产品信息,并保存到MongoDB数据库中。

def get_products():'''Desc:使用BeautifulSoup解析每一个产品的信息(图片、价格、付款人数、标题、店铺名、店铺地点)'''#等待每一个图片元素加载出来print('获取产品信息')wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-itemlist .items .item")))html = browser.page_sourcesoup = BeautifulSoup(html, 'html.parser')items = soup.select('#mainsrp-itemlist .items .item')for item in items:product = {'image': item.select('.pic img')[0]['src'],'price': item.select('.price')[0].text.strip(),'deal_number': item.select('.deal-cnt')[0].text[:-3],'title': item.select('.title')[0].text.strip(),'shop': item.select('.shop')[0].text.strip(),'location': item.select('.location')[0].text.strip()}print(product)save_to_mongo(product) #保存到Mongo数据库中

2.4 用selenium模拟执行翻页操作

def next_page(page_number):'''Desc:输入下一页页码,并点击确定,进行跳转param:page_number -- 搜索下一页的页码'''try:print('正在翻页', page_number)#等待直到局部元素显示出来,这里的局部元素为到第[2]页中的[..]input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input")))#等待直到元素可被点击,这里的元素为输入页码后的的确定按钮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) #把下一页的页码传入输入框中submit.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() #解析每一页产品的信息#发生延时异常时,重新调用next_page(page_number)方法except TimeoutException:next_page(page_number)

2.5 存储到MongoDB数据库中

  • 建立configure.py,配置MongoDB数据库地址、数据库名、表。
MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'product'
  • 在taobao_meishi.py中添加保存到MongoDB数据库中的代码。
def save_to_mongo(result):try:if db[MONGO_TABLE].insert(result):print('存储到Mongo数据库成功', result)except Exception:print('存储到Mongo数据库失败', result)

2.6 汇总,执行main()函数

def main():total = search(keyword)#使用strip方法去除字符串中的不需要的内容,取出其中的数字#也可以使用正则表达式, \d表示匹配任意的一个10进制数,+表示匹配前边的原子1次或多次#total = int(re.compile('(\d+)').search(total).group(1))total = int(total.lstrip('共 ').rstrip(' 页,'))for i in range(1,2):next_page(i)if __name__ == '__main__':main()

3 查看结果

3.1 运行结果

3.1 Robo 3T 数据库结果

  • 连接到localhost数据库地址和端口,建立名为taobao的数据库,点击Test测试成功后Save。

  • 查看数据库中的数据。

github地址

使用Selenium+Chrome爬取淘宝美食相关推荐

  1. selenium+chromedriver爬取淘宝美食信息保存到MongoDB

    配置文件 MONGO_URL = 'localhost' MONGO_DB = 'taobao_food' MONGO_TABLE = 'products' 代码实现 from selenium im ...

  2. python + selenium多进程爬取淘宝搜索页数据

    python + selenium多进程爬取淘宝搜索页数据 1. 功能描述 按照给定的关键词,在淘宝搜索对应的产品,然后爬取搜索结果中产品的信息,包括:标题,价格,销量,产地等信息,存入mongodb ...

  3. Python爬虫实战03:用Selenium模拟浏览器爬取淘宝美食

    1 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可以用Selenium来驱动浏览器模拟点击来爬取淘宝的信息.这样我们只要关系操 ...

  4. 吃货们看好了!python+selenium爬取淘宝美食

    前言 今天为大家介绍一个利用Python的selenium打开浏览器的方式来爬去淘宝美食,这个小案例涵盖了selenium的基本知识点,如何打开浏览器以及关键字的搜索 导入第三方库 打开浏览器 搜索功 ...

  5. 如何使用selenium自动化爬取淘宝信息

    如何使用自动化爬取淘宝信息 1.首先我们要确保安装了谷歌浏览器,并且是84.0版本 因为接下来我们要用到自动化这款软件,必须得和版本相匹配,否则就会失败 2.然后接下来,打开我们的taobao文件选择 ...

  6. 最新爬虫(2019.07)淘宝页面登陆滑块验证 selenium + chromedriver 爬取淘宝信息

    说在前面的话 你或许找了很久的方案来到了这里,当你看到本文章时,我默认你已经发现,淘宝的反扒措施是  webdriver和chromedriver的识别.所以我不会贴过多图片,不讲分析思路,直接给你鱼 ...

  7. python 淘宝搜索_Python使用Selenium+BeautifulSoup爬取淘宝搜索页

    使用Selenium驱动chrome页面,获得淘宝信息并用BeautifulSoup分析得到结果. 使用Selenium时注意页面的加载判断,以及加载超时的异常处理. import json impo ...

  8. selenium登录 爬取淘宝商品信息

    淘宝网: 淘宝网是亚太地区较大的网络零售.商圈,由阿里巴巴集团在2003年5月创立.淘宝网 是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已 ...

  9. selenium+chrome抓取淘宝搜索抓娃娃关键页面

    最近迷上了抓娃娃,去富国海底世界抓了不少,完全停不下来,还下各种抓娃娃的软件,梦想着有一天买个抓娃娃的机器存家里~.~ 今天顺便抓了下马爸爸家抓娃娃机器的信息,晚辈只是觉得翻得手酸,本来100页的数据 ...

  10. 使用selenium爬取淘宝店铺信息

    使用selenium +PhantomJS()/Chrome爬取 淘宝页面,存储到mongdb中 使用config进行一些设置 MONGO_URL = 'localhost' MONGO_DB = ' ...

最新文章

  1. php中的全局变量$_POST收集表单数据
  2. 谷歌浏览器Software Reporter Tool长时间占用CPU解决办法
  3. Office Tab免费版:标签化浏览和编辑Office文档
  4. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总
  5. codeforces——Little Pony and Sort by Shift
  6. Nvidia CUDA初级教程2 并行程序设计概述
  7. 不懂性能测试,被面试官挂了...
  8. linux笔记_防止ddos攻击
  9. python基础篇--从零开始(中)PyCharm、Vscode安装。
  10. 恒生Pb系统与讯投PB系统、PTrade交易系统比较
  11. 雅虎团队经验:网站页面性能优化的 34条
  12. 普元EOS之我要使用多数据源
  13. java token 生成_生成 Token
  14. iOS APP转让条件
  15. 【Python零基础到入门】Python基础语法篇——数字(Number) 学习 【文末送书】
  16. Thread.currentThread()、isAlive()、Thread.sleep()的使用
  17. 微信小程序身份证扫描OCR(信息自动带入)
  18. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
  19. (2018, BigGAN)用于高保真自然图像合成的大规模 GAN 训练
  20. 概率论01-样本空间,随机事件

热门文章

  1. 土著刷题新功能上线:根据每日学习时间,制定专属学习计划,多种数据统计维度追踪计划进度
  2. 高校人工智能专业报考指南
  3. 第五届云计算大会参会有感
  4. Javaweb小项目(课程设计)——网上书店
  5. python中的pep_Python 3.7 中的 PEP 562
  6. 云存储——别说你还没用过网盘
  7. 视频剪辑软件Corel VideoStudio Ultimate 会声会影2024中文旗舰版免费下载安装步骤
  8. 报表服务器无法打开与报表服务器数据库的连接
  9. Python趣味小游戏之猜数字游戏升级版!!!
  10. 电脑无法获取ip地址怎么解决