什么是动态网页?举个很常见的例子。当我们浏览网站时,随着网页的向下滑动,当前页面会不断刷新新的内容,但浏览器地址栏上的网址保持不变。这种由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


