python利用selenium+phantomJS爬淘宝

作者:黎智煊 叩丁狼高级讲师。原创文章,转载请注明出处。

环境准备:(本次准备环境都是基于window,其他系统都是类似的)


  1. 准备python基本版本(记得对应好自己的系统版本,32和64系统的区分)
  2. anacoda环境(自动包含jupyter notebook,一个利用浏览器和python进行交互的环境)
  3. 一个小小的注意地方
    • 就是安装anconda的时候,到第三步的时候,(就是点击 I agree协议的下一步),选择”All Users”,意思是全局安装,可以减少不少的烦恼.
    • 然后下一步的advance option,把add path也勾选.
  4. 下载phantomJS https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip.
  5. 然后解压好上面的软件到的文件夹,然后在这个文件夹按shift+右键,然后选择”在此处打开cmd/powershell窗口”,然后你输入jupyter notebook,然后一个基于web交互的python环境在打开在你面前了,惊不惊喜?意不意外?

  6. 如下图所示,你只需要点击右手边的new,选择python3就可以打开第一个python交互了.(然后具体的jupyter notebook用法就不详说了,可以自行百度)
    image.png

  7. 首先来一个小需求,就是去淘宝的特定商品,比如我这个”hdmi转dp”
    image.png

    • 然后你会发现,用python日常使用的爬虫工具requests+lxml的etree,是无法正常获取到价格等数据的,为什么?因为大多数的电商平台都是使用ajax,就是在真实的浏览器端不断的刷新获取数据,可能是同时获取到json数据,然后利用js脚本填数据,又或者是直接在页面来刷新等待数据,反正就是有一定反爬的措施.所以,就需要使用模拟浏览器的方式去获取数据了.使用phantomJS,这是一个虚拟的浏览器,但是都具备大部分的浏览器功能的.然后pyhton使用selenium语法去操作phantomJS就可以了.

python使用selenium调用phantomJS.


  1. 解压好文件并且重命名好.
    image.png
  2. 然后就新建一个python交互,填写这些代码,第一步都是导入selenium和实例化phantomJS:
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    ##实例化一个phantomJS
    ##注意导入的phantomJS路径,记得是放在一开始说好的位置
    driver = webdriver.PhantomJS(executable_path="phantomjs/bin/phantomjs.exe")
    
    如果出现No module named ‘selenium’,你直接打开任意一个cmd窗口就可以,输入pip install selenium就可以了.
    如果弹出一个”window防火墙安全警告”,把两个选项都打钩就可以了.!
  3. 然后继续写一下代码:
    ```python

    然后填入刚刚的淘宝url

    driver.get(“https://s.taobao.com/search?q=dp%E8%BD%AChdmi&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306“)

    然后设置一下模拟浏览器的长宽.我这里假设屏幕是1920*1080的屏幕.!

    driver.set_window_size(width=1920,height=1080)

然后按常理等待2秒钟左右.

time.sleep(2)

然后,我们现在尝试一下利用刚刚的模拟浏览器去截图导出看看结果.

driver.save_screenshot(“taobao.png”)

然后你去刚刚的文件看看是不是有一张图片显示出来,对的,就是如下图所示,价格出来了有没有.但是有个问题就是,感觉除了上部分能加载完,其余部分是空白的.
![image.png](https://upload-images.jianshu.io/upload_images/4151356-f67a28728bb08884.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
所以进行第四步,模拟滚动.
4. 模拟滚动,代码如下,我写成函数来调用了,方便调用,还有,一下为完整的代码:
```python
#导入selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.PhantomJS(executable_path="phantomjs/bin/phantomjs.exe")
#然后填入刚刚的淘宝url
driver.get("https://s.taobao.com/search?q=dp%E8%BD%AChdmi&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306")
##然后设置一下模拟浏览器的长宽.我这里假设屏幕是1920*1080的屏幕.!
driver.set_window_size(width=1920,height=1080)

##然后按常理等待2秒钟左右.
#time.sleep(2)

##模拟滚动
def rollView():
    global driver
    height = 1080
    for x in range(12):
        jsSQL = "document.body.scrollTop="+str(height)
        driver.execute_script(jsSQL)
        print(height)
        height += 1080
        time.sleep(2)

rollView()

##然后,我们现在尝试一下利用刚刚的模拟浏览器去截图导出看看结果.
driver.save_screenshot("taobao.png")

然后就能看到完整的整个页面了!
image.png

  1. 最后的最后,图片只是用来看的,所以,我们需要把加载好完整页面的数据再继续用于分类就可以了.按照上图,信息是保存在这个实例的page_source变量当中,我们可以打印一下,print(driver.page_source),所以,剩下的,你就可以为所欲为.
    image.png

  1. image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值