Python网络爬虫之动态网络爬取(一)

1 Selenium及其他插件安装

1.1 Selenium + PhantomJS T

由于目前最新的SeleniumE经放弃PhantomJs,所以大家在安装时首先要查看下你所安装的Selenium版本信息,在命令行(终端)中输入以下指令来查看Selenium的版本信息:

pip show selenium

如果发现你的版本248.0,需要执行以下操作进行卸载重装Selenium
(1) pip uninstall selenium
(2) pip install selenium==2.48.0

对于安装PhantomJS的方式,书本上已有Windows系统的安装过程,下面主要介绍Liunx系统的安装过程:

(1)官网下载http: //phantomjs . org/ download.html
(2) 解压(注意文件名可能会根据系统不同而改变) tar-xvf phantomjs-2.1.1-linux-x86 _64. tar .bz2
(3)移动到指定目录下同时重命名: sudo my phantomjs-2.1.1-1inux-x86_ 64 /usr/1oca1/ share/ phantomjs
(4)建立链接: **
In-s/usr/1pca1/share/phantomjs/bin/phantomjs /usr/1oca1/bin/ phantomjs**
下面以爬取人民邮电出版社页面(URL: https://www.ptpress.com.cn/ )内容进行一组对比测试:

#常规使用requests库
import requests
response=requests.get("https://www. ptpress. com. cn/")
print(response.text)

结果只有HTML框架,并未爬取到任何内容

#使用selenium+PhantomJS	
from selenium import webdriver
phantomjs=webdriver.PhantomJS()
phantomjs.get("https://www. ptpress. com. cn/")
print(phantomjs.page_source)

结果可以显示HTML框架里的内容

结论:

通过以上两个案例的实际对比,可以非常明显的发现,使用常规方式爬取的页面中无实际内容。其实,以前我们所学习的爬虫如果直接去爬取页面,通常只能正常获取静态页面,对于动态页面的内容则很难获取。

Tips小技巧:
怎么区别静态页面和动态页面?
在Chrome开发者工具中对比查看"Elements”和“Sources”两处的HTML内容是否致,如果内容一致则代表该网页为静态页面;否则就是动态页面。

特别说明
在最开始已经说过,selenium已经放弃PhantomJS,建议使用火狐或者谷歌无界面浏览器。

那么下面将主要介绍谷歌无界面刘览器的安装与使用方法,对于火狐的安装使用方法请人家自行百度或参考此网页:
https://blo/ csn.nt/01058168ariceletails79749149

1.2 Selenium + Headless Chrome

首先需要安装selenim.此时的selenium可以不需要限制版本,可以直接安装最新的版本!

其次本地安装Chrome浏览器, [非常关键]同时需要配置chromedriver驱动器文件,chromedriver的下载地址:
https://chromedriver.storage.googleapis.com/index.html

具体步骤如下:
(1) 获取chrome浏览器的版本信息,下载对应版本的ChromeDriver;
(2)解压缩下载的ChromeDriver文件;
(3)将解压后的文件chromedriver复制到/usr/bin目录下,并设置其系统权限为755。

尝试使用Selenium+Chrome,示例如下:

from selenium import webdriver
chrome=webdriver.Chrome()
chrome.get("https://www.ptpress.com.cn/")
print(chrome.page_source)

运行后会发现你的系统会自动打开谷歌浏览器并自动加载页面

2 入门操作实例

以操作百度搜索页面为例进行简单演示。要求在页面的搜索框中自动填写关键词并点击搜素进行查询

from selenium import webdriver
chrome=webdriver.Chrome()
chrome.get("https://www.baidu.com")
chrome.find_element_by_id("kw").send_keys("红花")
chrome.find_element_by_id("su").click()
print(chrome.page_source)

你可能感兴趣的:(Python网络爬虫)