Python使用Selenium webdriver爬虫某电商商品数据
2018-01-22 23:28
1251 查看
周末两天在家带孩子没有更新博客,今天用Selenium webdriver设计了一个爬虫程序,来获取某电商平台的商品信息。
首先简单介绍一下什么是Selenium webdriver。Selenium本身是一个项目的名字,它包含了一组使用工具以及一套API函数,
Selenium webdriver只是它的一个套件而已。Selenium webdriver本质上是一个支持浏览器自动化测试的工具,它可以为不同的浏
览器提供驱动,从而开发人员可以使用自己擅长的语言来编写自动化测试脚本。
Webdriver可以为多种语言提供类库,webdriver用driver去对不同的浏览器进行控制。目前主流的几大浏览器Chrome,
Firefox,Safari,IE都可以提供驱动。
本项目其实只是使用了Selenium
webdriver中很简单的功能,就是开发网页,同时把网页中需要的信息抓取到即可。
接下来需要介绍一下Selenium
webdriver在Python中的配置方法。
安装Selenium,当然这要求你有pip安装工具包
下载webdriver驱动器。我这里使用的是chrome,因此需要下载chromedriver.exe。下面是下载的地址:
http://chromedriver.storage.googleapis.com/index.html
这里要特别提醒一下,chromedriver.exe不同的版本对应不同版本的chrome浏览器,我使用的chrome浏览器的版本是63.0.3239.192。对应的chromdriver.exe的版本是v2.35。至于不同版本之间的对应关系,大家可以参考下面的这篇文章。
http://blog.csdn.net/huilan_same/article/details/51896672。
下载完webdriver之后,需要把chromedriver.exe拷贝到chrome浏览器的安装目录下,一般大家的chrome的安装目录都是
C:\Program Files (x86)\Google\Chrome\Application。最后把该目录的路径拷贝到系统的环境变量中即可。注意不同的环境变量要用;隔开。
好了,Selenium webdriver的开发环境我们已经搭建完毕,下面我们就可以正式进入爬虫程序的编写阶段。
首先说明一下,这段代码是爬取“一起火”网站的大衣产品的名称与价格,并且打印出来。我们把代码分成几个部分,一段一段来看。
这部分代码自然不必说,还是为了能够在sublime中打印中文字符,同时我们引入了Selenium webdriver这个包。
我们接着往下看
这里使用webdriver构造了一个对象,同时设置了读取每页信息的时间间隔
读取一页信息,主要是获取商品的总页数。这里是使用了基于DOM的CSS选择器,此处涉及一些web前端的知识,HTML,CSS以及JS,这些内容就比较多了,大家有兴
b37e
趣可以自己补充一下,这里不再多说。
最终商品的页数就存在pages这个变量中。
这里程序是一页一页来读取商品的信息,每页里商品的信息就保存在goods这个list中。为了节省时间,我们这里只抓取前5页的信息,当大于5时,程序就跳出。
这里要特别注意其中这行代码
有些页面时动态渲染了,页面没有往下滑动时,下面的页面是不会渲染的。这样信息就会读不完整,因此我们需要手动的操作一下页面,使其滑动到页面的底部,让所有的内容都渲染出来。这是一行JavaScript代码,意思就是让页面滑动到底部。
最后一部分代码
最后就是打印前5页的所有商品的title和价格。此处用try做了处理,因为我发现有些页面的DOM并没有严格按照span这样的格式来,因此会出现错误的情况,这里偷懒就用了try。有兴趣的小伙伴可以把检测是否为正常DOM的代码补上。
首先简单介绍一下什么是Selenium webdriver。Selenium本身是一个项目的名字,它包含了一组使用工具以及一套API函数,
Selenium webdriver只是它的一个套件而已。Selenium webdriver本质上是一个支持浏览器自动化测试的工具,它可以为不同的浏
览器提供驱动,从而开发人员可以使用自己擅长的语言来编写自动化测试脚本。
Webdriver可以为多种语言提供类库,webdriver用driver去对不同的浏览器进行控制。目前主流的几大浏览器Chrome,
Firefox,Safari,IE都可以提供驱动。
本项目其实只是使用了Selenium
webdriver中很简单的功能,就是开发网页,同时把网页中需要的信息抓取到即可。
接下来需要介绍一下Selenium
webdriver在Python中的配置方法。
安装Selenium,当然这要求你有pip安装工具包
pip install selenium
下载webdriver驱动器。我这里使用的是chrome,因此需要下载chromedriver.exe。下面是下载的地址:
http://chromedriver.storage.googleapis.com/index.html
这里要特别提醒一下,chromedriver.exe不同的版本对应不同版本的chrome浏览器,我使用的chrome浏览器的版本是63.0.3239.192。对应的chromdriver.exe的版本是v2.35。至于不同版本之间的对应关系,大家可以参考下面的这篇文章。
http://blog.csdn.net/huilan_same/article/details/51896672。
下载完webdriver之后,需要把chromedriver.exe拷贝到chrome浏览器的安装目录下,一般大家的chrome的安装目录都是
C:\Program Files (x86)\Google\Chrome\Application。最后把该目录的路径拷贝到系统的环境变量中即可。注意不同的环境变量要用;隔开。
好了,Selenium webdriver的开发环境我们已经搭建完毕,下面我们就可以正式进入爬虫程序的编写阶段。
首先说明一下,这段代码是爬取“一起火”网站的大衣产品的名称与价格,并且打印出来。我们把代码分成几个部分,一段一段来看。
# encoding=utf-8 import time from selenium import webdriver import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
这部分代码自然不必说,还是为了能够在sublime中打印中文字符,同时我们引入了Selenium webdriver这个包。
我们接着往下看
browser = webdriver.Chrome() browser.set_page_load_timeout(30)
这里使用webdriver构造了一个对象,同时设置了读取每页信息的时间间隔
# 有多少页商品 browser.get('http://www.17huo.com/search.html?sq=2&keyword=%E5%A4%A7%E8%A1%A3') page_info = browser.find_element_by_css_selector('body > div.wrap > div.pagem.product_list_pager > div') pages = int((page_info.text.split('. ')[0]).split(' ')[1])
读取一页信息,主要是获取商品的总页数。这里是使用了基于DOM的CSS选择器,此处涉及一些web前端的知识,HTML,CSS以及JS,这些内容就比较多了,大家有兴
b37e
趣可以自己补充一下,这里不再多说。
最终商品的页数就存在pages这个变量中。
for i in range(pages): if i > 5: break url = 'http://www.17huo.com/?mod=search&sq=2&keyword=%E5%A4%A7%E8%A1%A3&page=' + str((i + 1)) browser.get(url) browser.execute_script('window.scrollTo(0, document.body.scrollHeight);') time.sleep(2) goods = browser.find_element_by_css_selector('body > div.wrap > div:nth-child(2) > div.p_main > ul').find_elements_by_tag_name('li') print('第%d页有%d件商品' % ((i + 1), len(goods)))
这里程序是一页一页来读取商品的信息,每页里商品的信息就保存在goods这个list中。为了节省时间,我们这里只抓取前5页的信息,当大于5时,程序就跳出。
这里要特别注意其中这行代码
browser.execute_script('window.scrollTo(0, document.body.scrollHeight);')
有些页面时动态渲染了,页面没有往下滑动时,下面的页面是不会渲染的。这样信息就会读不完整,因此我们需要手动的操作一下页面,使其滑动到页面的底部,让所有的内容都渲染出来。这是一行JavaScript代码,意思就是让页面滑动到底部。
最后一部分代码
for good in goods: try: title = good.find_element_by_css_selector('a:nth-child(1) > p:nth-child(2)').text price = good.find_element_by_css_selector('div > a > span').text print(title, price) except Exception as e: print(e)
最后就是打印前5页的所有商品的title和价格。此处用try做了处理,因为我发现有些页面的DOM并没有严格按照span这样的格式来,因此会出现错误的情况,这里偷懒就用了try。有兴趣的小伙伴可以把检测是否为正常DOM的代码补上。
相关文章推荐
- Python抓取网页动态数据——selenium webdriver的使用
- 【Python3.6爬虫学习记录】(七)使用Selenium+ChromeDriver爬取知乎某问题的回答
- Selenium webdriver 使用python脚本处理SWFupload 文件上传
- Python爬虫工具 Selenium webdriver -自动化测试工具
- python爬虫webdriver.Chrome 数据可视化简单案例matplotlib
- Python+Selenium,使用WebDriver启动Firefox,但不打开URL
- [置顶] [爬虫]使用python抓取京东全站数据(商品,店铺,分类,评论)
- Python爬虫——selenium.common.exceptions.WebDriverException: Message: Failed to set preferences: Unable
- 4000 【爬虫】 通过关键字爬取淘宝商品列表信息 selenium 的 webdriverwait 和expected_conditions
- Python爬虫——selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly e
- 第五种方式,python使用组合来添加类方法和属性(二),以selenium的webdriver为例
- Python爬虫(入门+进阶)学习笔记 1-8 使用自动化神器Selenium爬取动态网页(案例三:爬取淘宝商品)
- selenium+python的WebDriverWait使用方法
- 使用Selenium-webdriver对页面进行截图操作
- 轻松自动化---selenium-webdriver(python) (四)
- 轻松自动化---selenium-webdriver(python) (七)
- WebDriver拾级而上·之十一 在selenium2.0中使用selenium1.0的API
- 轻松自动化---selenium-webdriver(python) (十)
- 轻松自动化---selenium-webdriver(python) (五)
- 轻松自动化---selenium-webdriver(python) (一)