使用Selenium爬取js渲染的页面

自从我的个人博客搭建起之后,每天的nginx日志里面都有很多来自爬虫的请求,大多都是 /index.php

/login.php   /admin.php等等之类的请求.据说互联网50%以上的流量都是来自爬虫,

以前前后端未分离的时候,页面都是服务端渲染好后返回给客户端,这样的页面就很好爬取,模拟一个http请求就能获取到后端的资源.

随着AJAX技术不断的普及,以及现在的angular和React,Vue等框架的出现, 页面渲染被转移到客户端了,一个爬虫请求过去,只能拿到最基本的html,资源请求和页面渲染全是js来完成的,这种情况怎么办呢?俗话说一物降一物,有反爬就有反反爬(哈哈),下面介绍一个工具Selenium,专治这种情况.废话不多说了,上代码:

一,添加Selenium依赖

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.33.0</version>
    </dependency>

二,下载一个chrome驱动

很多下载chrome驱动的网站都不能用了;推荐在淘宝的镜像仓库下载:

http://npm.taobao.org/mirrors/chromedriver/  注意版本,我下载的是73.0.3683.68/

三,爬虫代码

以西瓜视频为例,西瓜视频使用的是自己的一个播放器,

 红框里面的资源路径,就是视频的播放地址,是用js渲染进去的

下面的代码,第一行是先设置环境变量,让Selenium能找到chrome的驱动,不然会报错

  public static void main(String[] args) throws Exception {
        System.getProperties().setProperty("webdriver.chrome.driver", "D:\\chromeDriver\\chromedriver.exe");
        ChromeDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.ixigua.com/i6707783341539590659/");

        WebElement element = webDriver.findElement(By.xpath("/html"));
        System.out.println(element.getAttribute("outerHTML"));
        webDriver.close();

    }

运行代码,会弹出一个窗口,因为Selenium会创建一个chrome进程,相当于本地打开了一个谷歌浏览器,然后将拿到的html打印出来,可以看到这个

资源路径已经拿到了,好了,后面的就不用说了

爬虫有风险,各位仅为学习之用,千万守住底线!

### 使用 Selenium 爬取 NBA 网站数据 #### 安装依赖项 为了启动此项目,需安装 Python 3.x 和 Geckodriver(适用于 Firefox 浏览器)。此外,还需安装 `requirements.txt` 中列出的一些 Python 库[^3]。 ```bash pip install selenium pandas requests beautifulsoup4 ``` #### 初始化 WebDriver 创建一个新的 Python 文件并导入必要的模块: ```python from selenium import webdriver import time ``` 初始化 Web 驱动程序实例,并设置隐式等待时间以便加载 JavaScript 渲染的内容: ```python driver = webdriver.Firefox(executable_path='/path/to/geckodriver') driver.implicitly_wait(10) # seconds ``` #### 访问目标 URL 并抓取数据 访问 NBA 的官方网站或任何包含所需信息的具体页面。例如,要获取最新的比赛得分表单页: ```python url = 'https://www.nba.com/scores' driver.get(url) time.sleep(5) # 给予额外的时间让动态内容完全加载完毕 html_content = driver.page_source ``` #### 解析 HTML 内容 利用 BeautifulSoup 来解析返回的 HTML 文档,提取感兴趣的元素,比如表格中的行记录: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "lxml") table_body = soup.find('tbody') rows = table_body.find_all('tr') for row in rows: columns = row.find_all('td') data_row = [ele.text.strip() for ele in columns] print(data_row) ``` #### 关闭浏览器会话 完成操作后记得关闭浏览器窗口以释放资源: ```python driver.quit() ``` 上述代码片段展示了如何配置和使用 Selenium 进行基本的数据采集工作流。对于更复杂的需求,则可能还需要考虑异常处理机制、登录验证流程等问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值