爬完QQ音乐以后打算爬网易云音乐的,中间出了一点小状况,就改爬考拉海购了(什么状况你猜呀❛˓◞˂̶✧以后会爬完网易云音乐的!)
今天写近段时间的最后一篇,写完这篇就要开始期末复习了,寒假再来更新

进入正题,准备工作如下:
Selenium、Selenium官方文档、PhantomJS
下载了pip的话也可以用

pip install selenium

下载selenium

这次用到的东西官方文档都可以查到,我就不细说了,直接上代码

import time
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 pyquery import PyQuery as pq#用来解析网页源码
from sqlalchemy import create_engine,MetaData#引入数据库引擎create_engine以及引入MetaData来创建表格
from sqlalchemy.orm import sessionmaker#引入sessionmaker(用来创建数据工厂)
from sqlalchemy import Table,Column,Text#引入我们需要用到的属性
from sqlalchemy.sql import insert#引入插入语句#创建一个数据库引擎,调用create_engin方法,连接postgresql数据库,用户名为postgres,密码为123456,储存地址为本地存储,端口为5432数据库名为postgres
engine = create_engine('postgresql://postgres:123456@localhost:5432/postgres')
meta = MetaData(bind = engine)#将MetaData绑定到引擎上
Session = sessionmaker(bind = engine)#将sessionmaker绑定到引擎上,创建一个session工厂
session = Session()#调用工厂方法来创建一个session对象
KaoLa_table = Table('KaoLa', meta,  # 表名为KaoLa,数据库内一定不能有相同表名!!!Column('good_name', Text),  # 将good_name作为列名(key),并用primary设置为主key,用Text类型显示Column('price', Text),Column('comment', Text),Column('origin', Text),Column('store', Text),Column('url', Text))
meta.create_all()  # 建立表格choice = ['--load-images=false','--disk-cache=true']#PhantomJS的api,不加载图片,开启缓存
browser = webdriver.PhantomJS(service_args=choice)#选择PhantomJS浏览器并加入参数
browser.set_window_size(1400,900)#设置浏览器窗口大小,便于selenium运行
waite = WebDriverWait(browser, 10)#设置等待时间
key = '彩妆'#设置需要搜索的关键字
def search():print('搜索中')try:browser.get('https://www.kaola.com')# 用来关闭弹窗close = waite.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#index-netease-com > table > tbody > tr > td > div > div > div > div > div.modal-body > div > div.u-close")))# 用来输入搜索内容input = waite.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#topSearchInput"))#用css_selector检索)#用这个方法去点击,select会受上一次select的影响,从而使click失效#submit = waite.until(#EC.element_to_be_clickable((By.XPATH, "//*[@id='topSearchBtn']"))#)close.click()input.send_keys(key)#submit.click()# 上面click点击失效的问题用此法解决了   js大法好#用来点击搜索js = 'document.getElementsByClassName("w-icon w-icon-27")[0].click();'browser.execute_script(js)print('当前正在第 1 页')get_products()except TimeoutException:return search()def next_page():try:click_next = waite.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#resultwrap > div.splitPages > a.nextPage")))click_next.click()now_page = browser.find_element_by_xpath("//*[@id='resultwrap']/div[3]/span[1]").text#用xpath方法检索print('当前正在第', now_page, '页')time.sleep(1)get_products()return next_page()#这里最后一页不存在下一页按钮,所以处理必定超时,可以用这个超时来判断是否翻页完毕except TimeoutException:end_page = browser.find_element_by_xpath("//*[@id='resultwrap']/div[3]/span[1]").textprint('翻页完毕,第',end_page,'页')print('存储完毕')def get_products():waite.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#result > li > div")))html = browser.page_source#用这个语句拿到整个网页的源代码doc = pq(html)#用PyQuery解析goods = doc("#result > li > div").items()kaola_url = 'https://www.kaola.com'for good in goods:#用find方法检索product = {'good_name': good.find('.title').text(),'price': good.find('.cur').text(),'comment':good.find('.comments').text(),'origin':good.find('.proPlace.ellipsis').text(),'store':good.find('.selfflag').text(),'url':kaola_url + good.find('.title').attr('href')}save_data(product)def save_data(data):try:i = insert(KaoLa_table)# 插入数据i = i.values({'good_name': data['good_name'],'price': data['price'],'comment': data['comment'],'origin': data['origin'],'store': data['store'],'url': data['url']})session.execute(i)  # 将数据插入表格session.commit()  # 提交到数据库中print('存储成功:',data)except Exception:print('存储失败:',data)if __name__ == "__main__":try:search()next_page()except Exception:print('出错啦')finally:browser.close()#记得关闭浏览器

中间出了个小bug,就是我注释掉的这一段

这里click失效了,百度到了解决方法
js解决click失效问题参考博客

开始爬

爬完

看一下数据库里的情况

完美

参考视频教程:Python3爬虫三大案例实战分析

到这里就结束啦~寒假见
冷…

Python Selenium + PhantomJS爬取考拉海购商品数据相关推荐

  1. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  2. python爬取bilibili数据_python基础教程之selenium+phantomjs爬取bilibili

    selenium+phantomjs爬取bilibili 首先我们要下载phantomjs 你可以到 http://phantomjs.org/download.html 这里去下载 下载完之后解压到 ...

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

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

  4. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

  5. python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python ...

  6. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  7. Python实现考拉海购数据采集

    环境介绍 python 3.8 pycharm 2021专业版 requests >>> pip install requests parsel >>> pip i ...

  8. 批量抓取并保存考拉海购上的宝贝商品主图和细节图

    如何将考拉海购上的商品图批量采集并保存到电脑上?今天小编给大家介绍一款电商图片视频素材批量采集软件--载图助手,下面就给大家演示操作怎样采集并保存考拉海购上多个商品原图 在演示操作前先让您们参观一下所 ...

  9. 亲历者说 | 完整记录一年多考拉海购的云原生之路

    作者 | 张洪箫(花名:伏见)阿里巴巴新零售高级技术专家 来源|阿里巴巴云原生公众号 前言 考拉海购的整个云化改造是从 2019 年 10 月份开始的,当时的唯一目标就是短时间内快速完成迁移.在不到 ...

最新文章

  1. xfce的面板调节声音大小的按钮不见了。
  2. UVA - 514 Rails-栈
  3. Mac os安装SEAL
  4. Python批量修改Excel文件格式:加粗、颜色交替、渐变背景色填充
  5. java中线程的状态以及线程栈分析
  6. 【转】C/C++中宏使用总结
  7. 计算机组成原理唐朔飞重点,计算机组成原理唐朔飞高分笔记
  8. android开发工具类(草鸡好用)
  9. R语言︱线性混合模型理论与案例探究(固定效应随机效应)
  10. 斐讯N1变砖终于有救了,使用ddbr恢复官改系统救砖方法
  11. php阴阳万年历转换的接口,用php写的阴阳万年历
  12. Windows下模拟弱网(web、app)均可使用
  13. STM32学习之ILI9341控制显示屏输出(一)
  14. 802.11成帧封装实现(三)
  15. C++ 实现trim函数
  16. 金山打字通2008下载-金山打字通2008正式版-金山打字通2008完整版
  17. 揭秘软件臃肿的真实原因!
  18. 手机App将三年内消失,互联网世界的第二次大战
  19. Python数据可视化之Plotnine库超详细教程系列
  20. 海康、大华网络摄像机(Ip Camera)RTSP地址和格式

热门文章

  1. 西班牙旅行笔记(I)
  2. svn: E170001 : Authorization failed 非主流的解决方案!
  3. 芜湖赛宝机器人研究院_中国赛宝官方网站
  4. android 动态添加快捷方式,Android动态创建快捷方式
  5. 【译】如何提高工作效率——HOWTO: Be more productive
  6. [LeetCode Python3]77. Combinations回溯
  7. 模拟退火(Simulated Annealing)算法 PO J1379 2420
  8. 学会你就是半仙!古代识人术!!
  9. [剑指Offer]-矩阵中的路径
  10. NSWOJ-zlh找男朋友(水题)