动态渲染组件

核心提示什么是动态网页呢,举个很常见的例子,当我们在浏览网站时,随着不断向下滑动网页,当前页面会不断刷新出新的内容,但浏览器址栏上的URL却始终没有变化。这种由JavaScript动态生成的页面,我们通过浏览器查看它的网页源代码时,往往找不到页面上

什么是动态网页?举个很常见的例子。当我们浏览网站时,随着网页的向下滑动,当前页面会不断刷新新的内容,但浏览器地址栏上的网址保持不变。这种由Javascript动态生成的页面,当我们通过浏览器查看其源代码时,往往找不到页面上显示的内容。

本文将向您展示如何使用轻量级应用服务器抓取Javascript动态页面的内容。

一.导言

对于复杂的网站设计,比如网站页面的Javascript动态渲染,入门级爬虫并不适合。

本文主要针对Javascript动态渲染页面,使用Selenium ޽˹+ Scrapy抓取levels.fyi中微软员工的信息和工资,并描述了如何抓取Javascript页面。该方案部署在腾讯云的轻量级服务器Lighthouse。

第二,买灯塔

先简单介绍一下灯塔的购买情况。什么是灯塔?

轻量级应用服务器是一种易于使用和管理,适合承载轻量级业务负载的云服务器。可以帮助中小企业和开发者在云端快速搭建网站、博客、电子商务、论坛等应用和开发测试环境,提供应用部署、配置、管理的全流程一站式服务,大大提升了构建应用的体验。使用腾讯云是你最好的入口方式。

Lighthouse提供多种镜子可供选择。在这里,我们先选灯镜,再付费打包,我们有你自己的灯塔镜!

第三,页面分析

在levels.fyi中进入开发者模式时,可以看到要抓取的元素实际上是一个iframe,数据由script脚本生成:

首先,我们需要获得tbody下的每个tr,并选择我们需要的数据。

然后直接用Request获取tbody,你会发现这个元素下没有数据:

t_body = response.css.extract

打印

接下来说明如何成功获取javascript生成的tbody数据。

四。获取硒

Selenium是一个web自动化工具,它运行在浏览器中,使用脚本来模拟用户在浏览器上的操作。在这个例子中,本质上,Selenium用于等待javascript加载,然后获取数据。Selenium的安装和配置非常简单,编写脚本也非常容易。缺点是和其他抓取方式相比,Selenium的抓取速度相对较慢。

Selenium安装:pip安装selenium

浏览器驱动下载:要使用Selenium,您需要下载浏览器驱动。建议下载Chrome版本。下载完成后,mac可以直接放在/usr/local/bin中。Windows需要在脚本中配置下一个路径或环境变量。

建立scrapy项目,创建一个新的MicrosoftSpider,进行简单的配置。

获取驱动程序对象:

driver = webdriver。铬

使用WebDriverWait并等待页面加载。这里,我们将超时设置为һѪ5Ѫ秒:

wait = WebDriverWait

Wait.until) #等待加载第一行内容。

等待后,尝试获取tbody中的第一行数据。

tr1 = self . driver . find _ element _ by _ XPath . text #每行信息

打印

在上面的代码中,我们使用了find_element_by_xpath函数。这个函数是在Selenium中获取元素的函数,它返回WebElement类型。你可以通过文本得到元素的文本。

接下来,使用相同的方法,我们得到“下一页”按钮并单击它:

wait = WebDriverWait

Wait.until) #等待内容完成加载。

next _ page = self . driver . find _ element _ by _ CSS _ selector

Next_page.click #模拟单击下一页

Next_page也是一个WebElement类型。如您所见,除了文本等基本属性之外,WebElement还具有click等操作。其实这也是WebElement最常用的方式。

到目前为止,我们已经得到了所有的关键要素。下一步是抓取每一行的元素,并在循环中单击。

Selenium的教程实际上已经结束了,

动词 (verb的缩写)代码地址

最后附有示例代码的Github地址:https://github.com/Pro-YY/baby-steps-to-the-cloud

本文参考来源:AmazzzingShang

 
友情链接
鄂ICP备19019357号-22