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工具爬取商品的更多相关文章

  1. selenium+phantomjs爬取京东商品信息

    selenium+phantomjs爬取京东商品信息 今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618. ...

  2. Python post请求模拟登录淘宝并爬取商品列表

    一.前言 大概是一个月前就开始做淘宝的爬虫了,从最开始的用selenium用户配置到selenium模拟登录,再到这次的post请求模拟登录.一共是三篇博客,记录了我爬取淘宝网的经历.期间也有朋友向我 ...

  3. Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页

    Python3.x:Selenium+PhantomJS爬取带Ajax.Js的网页 前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但 ...

  4. selenium异步爬取(selenium+Chromedriver)

    在我们进行数据爬去的过程中,我们有时候会遇到异步加载信息的情况,以豆瓣电影分来排行榜为例,当我们在查看数据的过程中,会发现网页源码中并不包含我们想要的全部数据,但是当我们在进行向下滚动的时候,数据会一 ...

  5. [python爬虫] Selenium定向爬取PubMed生物医学摘要信息

    本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容.        PubMed是一个免费的搜寻引擎,提供生物医学方 ...

  6. selenium+phantomjs爬取bilibili

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

  7. selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)

    一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ...

  8. 使用selenium 多线程爬取爱奇艺电影信息

    使用selenium 多线程爬取爱奇艺电影信息 转载请注明出处. 爬取目标:每个电影的评分.名称.时长.主演.和类型 爬取思路: 源文件:(有注释) from selenium import webd ...

  9. scrapy中使用selenium来爬取页面

    scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...

随机推荐

  1. 二十、网络ifconfig 、ip 、netstat、ss之二

    ip 网络层协议 ip地址 点分十进制分为4段,范围 0-255 ip分类 A 占据1段,最左侧一段第一位固定为0 0 000 0000 - 0 111 1111  0 - 127:其中0为网络,12 ...

  2. 关于rsa公钥格式的处理,一行纯内容进行换行格式化

    最近在开发百度小程序,他的平台公钥是纯字符串,公钥的内容,没有rsa文件的头(-----BEGIN PUBLIC KEY-----)和尾部分-----END PUBLIC KEY----- 但是 PH ...

  3. maven的pom报错web.xml is missing and <failOnMissingWebXml> is set to true

    错误信息:web.xml is missing and <failOnMissingWebXml> is set to true 解决办法:https://blog.csdn.net/si ...

  4. CISCO实验记录九:NAT地址转换

    1.静态NAT地址转换 #ip nat inside source static 192.168.12.1 192.168.23.4 //将12.1转为23.4 必须精确到主机IP 而不能是某个网段 ...

  5. Mac OS xshell xftp 替代工具-finalshell

    安装步骤: 1,打开Mac 终端: 2,输入: curl -L -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_instal ...

  6. js for (i=0;i<a.length;a[i++]=0) 中等于0怎么理解?

    js的问题for (i=0;i<a.length;a[i++]=0) 中等于0怎么理解? 很奇怪的一个for循环 竟然是将原来数组的数据全改为0

  7. Objective-C中的self与LLVM Clang新引入的instancetype

    我们知道,大部分面向对象语言对于一个类的成员方法都有一个隐含的参数.在C++.Java.C#和JavaScript中是this,而在Objective-C中则是self.当然,由于Objective- ...

  8. MR21修改标准价

    转自:https://blog.csdn.net/qq_21813647/article/details/79195731 物料帐下只有物料的状态是初始状态才允许修改价格. 如果状态为已输入数量和值也 ...

  9. swift 第六课 scrollview xib 的使用

    现在 xib,stroyBoard 这种图形话的编辑写代码,越来越简单.以前scrollview 这样的控件不会用xib ,网上查了 好多的资料.现在把步骤逐渐的写出来, 这里顺便写个Demo ,是一 ...

  10. Flutter 底部导航栏bottomNavigationBar

    实现一个底部导航栏,包含3到4个功能标签,点击对应的导航标签可以切换到对应的页面内容,并且页面抬头显示的内容也会跟着改变. 实际上由于手机屏幕大小的限制,底部导航栏的功能标签一般在3到5个左右,如果太 ...