Selenium工具爬取商品
selenium是一个优秀的自动化测试工具,支持多种语言,具体介绍参考官方文档:https://www.seleniumhq.org/docs/。
下面我们使用selenium工具模拟用户点击商品详情页,在详情页中获取商品预览图。
一、安装selenium
pip install selenium
二、测试安装
python
>> from selenium import webdriver
>> browser = webdriver.Chrome()
若没有报错,则可进行后面的步骤。若有错误提示未找到chromedriver,需要下载chromedriver
三、下载chromedriver
下载与本地浏览器版本相同的chromedriver,下载后,需将该驱动包放入PATH中,我的浏览器版本 75.0.3770.142
wget http://npm.taobao.org/mirrors/chromedriver/74.0.3729.6/chromedriver_linux64.zip
tar zxvf chromedriver_linux64.zip
cd chromedriver_linux64
export PATH=$PATH:~/Downloads/chromedriver_linux64
四、使用举例
url = "http://www.baidu.com"
browser = webdriver.Chrome()
browser.get(url)
ele = browser.find_element_by_class_name('')
print(ele)
其中,find_element_by_class_name根据标签class样式来获取元素,类似的方法还有很多,比如:
find_element_by_id
find_element_by_xpath
find_element_by_tag_name
....
五、实战
下面我们以抓取www.layuva.com中商品信息为例,该站点的商品详情页链接是动态生成的,现在很多站点内容都是动态生成,这类站点很适合selenium工具抓取数据。具体demo参见附件
1、新建driver实例
url = "https://www.layuva.com/pc/index.html#/home/searchDetail?category_id=1060730203664142336"
browser = webdriver.Chrome()
browser.get(url) 2、获取商品列表
list_box = browser.find_elements_by_xpath('//*[@id="app"]//div[5]/div[2]/div/div')
3、模拟用户查看商品详情
for box in list_box:
box.click()
browser.switch_to.window(browser.window_handles[-1])
4、获取详情页中的商品信息
image_src = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div[5]/div/div[1]/div[1]/img'))).get_attribute('data-src') 5、退出详情页
browser.close()
browser.switch_to.window(browser.window_handles[0])
6、获取下一页
target = browser.find_element_by_css_selector(
'#app > div.searchDetail > div.width-base > div.common-page > ul > li.ivu-page-next')
if target.get_attribute('class').find('ivu-page-disabled') >= 0: // 判断是否有下一页
break
ActionChains(browser).move_to_element(target).click(target).perform() # 模拟点击《下一页》按钮
欢迎拍砖
Selenium工具爬取商品的更多相关文章
- selenium+phantomjs爬取京东商品信息
selenium+phantomjs爬取京东商品信息 今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618. ...
- Python post请求模拟登录淘宝并爬取商品列表
一.前言 大概是一个月前就开始做淘宝的爬虫了,从最开始的用selenium用户配置到selenium模拟登录,再到这次的post请求模拟登录.一共是三篇博客,记录了我爬取淘宝网的经历.期间也有朋友向我 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页
Python3.x:Selenium+PhantomJS爬取带Ajax.Js的网页 前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但 ...
- selenium异步爬取(selenium+Chromedriver)
在我们进行数据爬去的过程中,我们有时候会遇到异步加载信息的情况,以豆瓣电影分来排行榜为例,当我们在查看数据的过程中,会发现网页源码中并不包含我们想要的全部数据,但是当我们在进行向下滚动的时候,数据会一 ...
- [python爬虫] Selenium定向爬取PubMed生物医学摘要信息
本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容. PubMed是一个免费的搜寻引擎,提供生物医学方 ...
- selenium+phantomjs爬取bilibili
selenium+phantomjs爬取bilibili 首先我们要下载phantomjs 你可以到 http://phantomjs.org/download.html 这里去下载 下载完之后解压到 ...
- selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)
一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ...
- 使用selenium 多线程爬取爱奇艺电影信息
使用selenium 多线程爬取爱奇艺电影信息 转载请注明出处. 爬取目标:每个电影的评分.名称.时长.主演.和类型 爬取思路: 源文件:(有注释) from selenium import webd ...
- scrapy中使用selenium来爬取页面
scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...
随机推荐
- UVALive 3716 DNA Regions ——(扫描法)
乍一看这个问题似乎是很复杂,但其实很好解决. 先处理出每个点到原点的距离和到x正半轴的角度(从x正半轴逆时针旋转的角度).然后以后者进行排序. 枚举每一个点到圆心的距离,作为半径,并找出其他到圆心距离 ...
- Spring基础环境搭建所需要的jar包
红色标明的jar包.是spring框架开发的基础jar包. 必要jar包. spring-core-4.1.6.RELEASE.jar 框架核心jar包. spring-beans-4.1.6.REL ...
- Mysql 原理以及常见mysql 索引等
## 主键 超键 候选键 外键 (mysql数据库常见面试题) 数据库之互联网常用架构方案 数据库之互联网常用分库分表方案 分布式事务一致性解决方案 MySQL Explain详解 ## 数据库事务的 ...
- Linux中查看系统资源占用情况的命令
用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...
- R-CNN/Fast R-CNN/Faster R-CNN
一.R-CNN 横空出世R-CNN(Region CNN,区域卷积神经网络)可以说是利用深度学习进行目标检测的开山之作,作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2 ...
- Swift 字面量
所谓字面量,就是指像特定的数字,字符串或者是布尔值这样,能够直接了当地指出自己的类型并为变量进行赋值的值.比如在下面: let aNumber = //整型字面量 let aString = &quo ...
- 文件上传对servlet的要求
request.getParamter(String name)方法不能再使用了 需要使用request.getInputStream()获取输入流对象然后在进行读取数据 解析数据 ServletIn ...
- 强悍的Python读取大文件的解决方案
这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...
- [spring]数据库的连接配置
使用druid数据源 ,并支持事务处理. <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- ElasticSearch——集群搭建
1.准备 1.1.组件 JDK:1.8版本及以上: ElasticSearch:6.2.4版本: 1.2.服务器 3台服务器 2.安装 2.1.下载解压 wget https://artifacts. ...