Python可以运用selenium+scrapy来进行爬取拉勾网的信息
优采云 发布时间: 2021-07-16 21:29Python可以运用selenium+scrapy来进行爬取拉勾网的信息
作为数据分析的强大工具,R语言也有很多方便的封装示例Rcurl和rvest,用于数据采集,满足基本需求。 知乎上已经有很多文章来介绍他们的用途了。
但是,当我尝试爬取拉勾网的数据时,发现没有抓取到信息,而且源代码没有对应右键review元素,这让我很困扰。在网上搜索了相关问题,发现这是一个基于AJAX的动态网页,不同于静态网页。
AJAX AJAX 代表“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),指的是一种用于创建交互式 Web 应用程序的 Web 开发技术。
简单来说,网页通过异步传输获取页面信息。以拉勾网为例:
点击右下角下一页后,页面内容发生了变化,但网址没有变化。对爬虫的影响是无法简单地使用Rcurl获取想要的信息。
查找相关资料,了解到Python可以使用selenium+scrapy来抓取动态网页。
Selenium(浏览器自动化测试框架)Selenium 是一种用于 Web 应用程序测试的工具。 Selenium 测试直接在浏览器中运行,就像真实用户操作一样。
无独有偶,作为开源语言,R语言也为类似的操作开发了相应的Rwebdriver包。
本文基于Rwebdriver包抓取拉勾网信息。
前期准备
先下载selenium.3.4。 (下载链接)
要运行selenium,需要java并配置环境变量。 (不明白的请戳传送门)
那么如果你的浏览器和我一样是chorme,你需要下载对应版本的浏览器驱动chormedriver。
(下载地址比如我是V59,对应的下载就近2.31)
Chromedriver可以放在chorme的安装根目录下,路径也设置为系统路径。
(比如我把chromedriver放在"C:\Program Files (x86)\Google\Chrome\Application\",所以我也把path设置为path)
最后在selenium所在根目录打开cmd,输入“java -jar selenium-server-standalone-3.4.0.jar”启动服务。
(每次开启selenium服务都需要,所以可以写个bat)
当出现“Selenium Server is up and running”时,表示它开始运行了。
R 语言代码部分
需要加载的包
library(RCurl)# 抓取数据
library(XML)# 解析网页
library(stringr)# 字符串处理
library(dplyr)# 调用%>%管道
library(Rwebdriver)# 爬取动态网页
Rwebdriver包需要通过调用devtools从github下载:
devtools::install_github(repo = "Rwebdriver", username = "crubba")
提供主要的浏览器操作功能:
start_session(root = NULL, browser = "firefox",
javascriptEnabled = TRUE, takesScreenshot = TRUE,
handlesAlerts = TRUE, databaseEnabled = TRUE,
cssSelectorsEnabled = TRUE) # 打开浏览器
post.url(url = NULL) # 打开网页
page_refresh() # 刷新网页
page_back() # 网页后退
page_forward() # 网页前进
page_source() # 获得当前页面信息
element_xpath_find() #通过XPATH找到所要部分
element_css_find() #通过CSS找到所要部分
element_click(ID = ID, times = 1, button = "left")# ID为所要点击的地方,times为点击次数,button="left"为左键点击
keys()#输入内容
element_clear()#清除内容
以下为爬行拉钩网示例,可根据需要修改:
<p>start_session(root = 'http://localhost:4444/wd/hub/',browser ="chrome")# 默认端口是4444,我的浏览器是chorme,如果使用火狐改成firefox
list_url