python3+selenium+chrome实战速成

皮卡丘联合爬虫业界大牛FastGets整理一系列文章,介绍python爬虫基础知识、大牛多年反爬经验,有难度网站抓取实战、爬虫系统架构设计、安卓app逆向分析。帮助小白入门,初级工程师成为资深工程师,大神回顾。大家有任何问题可留言交流,欢迎转发分享。

爬虫工程师经常会遇到一些网页在浏览器中打开是有数据的,但是html源码里面却没有数据。这通常是由于浏览器执行了html源码中的js代码,然后生成了数据,使我们在浏览器中可以正常看到,但是源码却没有,这就给数据采集增加了困难。针对这类问题,笔者今天来介绍python3 + selenium + chrome组合。

Selenium 是一个自动化测试工具,它提供了一个通用的接口,来模拟用户操作浏览器。它支持多种浏览器,包括 Chrome,Safari,Firefox,PhantomJS等主流界面式浏览器,也是由于这个特性,被广泛的应用于数据采集中,主要是来解决JavaScript渲染等问题。

之前笔者主要使用PhantomJS这个无界面的浏览器,由于无界面性能和速度都会好些。但是PhantomJS无人维护,坑比较多,好在Chrome在V59版本之后,支持无界面模式,所有chrome就成了我们的首选。

一、环境配置

1. Linux系统 ,笔者使用的是centos7

(1)安装google-chrome

添加chrome源,在终端输入

sudo vi /etc/yum.repos.d/google.repo

然后将下面复制进去,保存退出。

终端输入:

sudo yum -y install google-chrome-stable

然后测试下,是否安装成功,在终端输入:

google-chrome-stable --no-sandbox --headless --disable-gpu --screenshothttps://www.baidu.com/

看看当前目录下是否有截图生成。

(2) 安装chromedriver

chromedriver的版本需要与chrome一致,在终端输入如下命令,查看刚刚安装的chrome版本

google-chrome -version

# 输出:Google Chrome 66.0.3359.117

可知笔者的版本是66。

我们打开notes.txt,如下图:

可以看到2.38版本的chromedriver支持66版本的chrome,然后我们下载此版本就好,在终端输入:

# 下载:

wgethttps://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip

# 解压:

unzip chromedriver_linux64.zip

# 移动到/usr/bin目录下:

sudo mv chromedriver /usr/bin/

如果不移动的话,需要在启动时,写出chromedriver的路径。

(3) 安装python3模块selenium

pip3 install selenium

到这里安装成功了。有一点需要注意,linux下我们使用selenium调用chromedriver时,不能在root用户下,否则会报错。

2.Windows系统和Mac系统

他们的安装比Linux简单一些,下载与Chrome对应版本的chromedriver,然后将其路径添加进环境变量即可。

二、使用方法

以上代码就可以打印出百度的html源码了。

1. 获取JavaScript渲染的数据

下面我们来看一个例子:

浏览器打开以下链接:https://detail.tmall.com/item.htm?id=564794769484

可以看到月销量的值为95,然后我们显示网页源码,如下:

可以看到源码里面其实是没有值的。

看如下代码,我们对比requests和chrome:

可以看到,我们使用chrome的无界面模式,成功获取到了月销量的值。

2. 模拟登陆后获取cookie

笔者以微博为例,我们登陆微博并获取cookie,代码如下:

获取到了cookie之后,我们就可以使用cookie来登陆操作,使用requests来直接抓取页面了。看如下例子:

3.执行js

下面我们将百度首页的百度一下,改为搜狗二下浏览器出现:

以后每篇文章的代码都可以在github的CrawlArticles仓库查看:https://github.com/piweidong/CrawlArticles

【往期文章】

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180514G1XE9A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券