这篇博客主要是通过Selenium来模拟浏览器操作,抓取淘宝商品的信息,并将结果保存到MongoDB中。
淘宝为什么需要用所谓的Selenium
来进行抓取呢,是因为淘宝这种页面,其Ajax接口包含很多加密参数,我们很难从中找出规律。为了解决这个问题,我们引入Selenium
。
Selenium简介
Selenium
是自动化测试工具,利用它可以驱动浏览器执行特定的动作,比如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面源代码,做到可见即可爬,对于一些JavaScript
动态渲染的页面来说,这种抓取很有效。除了需要Selenium
之外,还需要与之搭配的浏览器,因此需要Chrome
浏览器和ChromeDriver
驱动的配置
Selenium
安装
1
2 >pip install selenium
>
ChromDriver
安装
首先查看Chrome的版本号:通过点击Chrome的菜单帮助->关于Google Chrome里面就有其版本号
然后根据Chrome的版本号,下载ChromeDriver的型号。
然后配置环境变量,具体看《python3 网络爬虫开发实战》的介绍。
Selenium
的使用
- 申明浏览器对象并访问页面
查找节点
单个节点
查找单个节点比如搜索框,首先要看源码,通过选定页面元素,可以在网页源码中查看到,可以通过
find_element_by_name()
以及find_element_by_id()或者find_element(BY,ID,id)
来获取相关的属性。多个节点
获取多个节点可以通过
find_elements()
来得到。节点交互
节点交互就是模拟我们平常在网页上的操作。比如下面这个
1
2
3
4
5
6
7
8
9
10
11
12
13 > >from selenium import webdriver
> >import time
> >
> >browser = webdriver.Chrome()
> >browser.get('http://www.taobao.com')
> >input=browser.find_element_by_id('q')
> >input.send_keys('iphone')
> >time.sleep(1)
> >input.clear()
> >input.send_keys('ipad')
> >button=browser.find_element_by_class_name('btn-search')
> >button.click()
> >
更多的常见节点动作操作,可以查看官方文档
动作链
比如执行鼠标拖动、键盘按键灯没有特定执行对象的操作,就需要使用动作链来执行。比如下面这段代码实现将一个节点拖曳至另一个节点处。
1
2
3
4
5
6
7
8
9
10
11
12
13 > >from selenium import webdriver
> >from selenium.webdriver import ActionChains
> >
> >browser = webdriver.Chrome()
> >url = 'http://www.runoob.com/'
> >browser.get(url)
> >browser.switch_to_frame('iframeResult')
> >source =browser.find_element_by_css_selector('#draggable')
> >target =browser.find_element_by_css_selector('#droppable')
> >actions=ActionChains(browser)
> >actios.drag_and_drop(source,target)
> >action.perform()
> >
Splash
的使用
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时他对python中的Twisted和QT库
使用Selenium
爬取淘宝商品
爬取思路
爬取淘宝上的商品的爬虫程序主要分为四个大的部分:
- 获取商品列表
抓取的入口就是淘宝的搜索页面,这个连接可以通过直接构造函数来进行访问,搜索iPad就可以直接通过网址
http://s.taobao.com/search?q=ipad
将呈现第一页的搜索结果。
- 解析商品列表
- 保存到MongoDB
- 遍历每页
商品的搜索结果一般最大都是100页,要获取每页的内容就需要有翻页操作,可以通过在文本框中
输入页码
,点击确定
进行翻页,不推荐使用下一页
,因为直接点击下一页容易出现加载失败的情况。
代码
1 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。