ajax跳转页面_Python爬虫实例--用selenium抓取动态页面

一、什么是selenium

Selenium是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web 的管理任务自动化。

  • Selenium 官网:https://www.seleniumhq.org/
  • Selenium Github 主页:https://github.com/SeleniumHQ/selenium

1.安装 Selenium 工具包

由于 安装好的 Python 默认有 pip (Python 包管理工具),可以通过 pip 非常方便的安装 Selenium。

启动命令行工具:Win+R -->输入 cmd--> 回车

输入命令:pip install selenium

2.安装浏览器驱动

Selenium 3 对于所有的浏览器都需要安装驱动,本文以 Chrome 为例设置浏览器和驱动。

ChromeDriver下载地址:http://chromedriver.storage.googleapis.com/index.html

ChromeDriver 与 Chrome 对应关系表:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第1张图片

查看自己的Chrome版本:(打开设置)

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第2张图片

更高的Chrome版本直接找对应的文件夹下载即可:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第3张图片

下载好后解压到Python安装目录的Scripts文件夹下

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第4张图片

二、使用selenium爬取动态页面

首先我们用requests抓取今日头条的首页:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第5张图片

发现返回的都是静态页面,并没有我们想要的新闻内容。

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第6张图片

这是因为像头条,知乎,淘宝这种网站,它的页面都是动态页面,靠Ajax动态加载的,这时候就需要用到selenium了。

from 

当我们运行上述代码后,会弹出这样的界面,说明selenium驱动成功了

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第7张图片

通过driver.get('目标网址'),我们就可以通过代码,访问我们要爬取的网站了:

driver.get('http://www.baidu.com')

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第8张图片

那么我们怎么搜索内容呢?

1.通过开发者工具(F12),定位到百度的搜索框:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第9张图片

如果我们想要通过CSS选择器定位的话,定位到搜索框,然后右键Copy-->Copy selector即可

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第10张图片
# 通过X-path定位到该输入框
# driver.find_element_by_xpath('//*[@id="kw"]')
# 通过CSS选择器,定位到该输入框,#kw就是刚刚复制的内容
input=driver.find_element_by_css_selector('#kw')
# 在输入框中输入 python
input.send_keys('python')

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第11张图片

页面跳转:(注意此时只是输入了python,并没有执行点击百度一下的操作,所以下方会有提示)

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第12张图片

接下来我们需要点击:百度一下这个按钮,同样我们和刚才定位百度搜索框一样定位:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第13张图片

右键Copy-->Copy selector即可

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第14张图片

注:#su 就是复制的内容

# 定位到百度一下按钮
enter=driver.find_element_by_css_selector('#su')
# 对该按钮执行点击
enter.click()

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第15张图片
input.clear()

执行input.clear()清空搜索框,

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第16张图片

可以继续: input.send_keys('想要重新搜索的内容')

input

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第17张图片

好,了解了这些操作以后,我们开始抓取今日头条的内容:

driver.get('https://www.toutiao.com/')
# 通过selenium抓取的内容保存在page_source中
print(driver.page_source)

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第18张图片

通过查看,确实返回了新闻的内容,说明selenium是可以帮我们获取这种动态页面的信息的。

但是,我们又发现,selenium返回的新闻内容只是一部分,如果我们想要获取更多的新闻内容,应该怎么做呢?,不用担心,selenium是可以执行Javascript脚本的,我们可以通过这个特性让selenium模拟鼠标向下滚动,这样返回的新闻就要比上面返回的多了。

import time
# 执行5次滚动
for i in range(5):
    #javascript 脚本 document.documentElement.scrollTop获取当前页面的滚动条纵坐标
    js='var q=document.documentElement.scrolltop'+str(i*500)
    #执行js脚本
    driver.execute_script(js)
    #每滚动一次,休眠2秒,给页面一个加载的时间
    time.sleep(2)

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第19张图片

接下来,我们定位到每个新闻的标题,通过BeautifulSoup将其提取出来,

from bs4 import BeautifulSoup
soup=BeautifulSoup(driver.page_source,'lxml')
news=soup.find('div',attrs={'class':'feed-infinite-wrapper'}).find('ul')
print(news)

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第20张图片

接下来我们从返回的news中提取新闻标题:

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第21张图片

ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第22张图片
#将所有的
  • 标签放入一个列表 news_list=news.find_all('li') #遍历该列表 for li in news_list: #在
  • 标签中通过class="link"找到标签 title=li.find('a',attrs={'class':'link'}) if title: #返回的是标签的信息,我们要的是其中的文本内容(新闻标题) title=title.get_text() print(title)
  • ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第24张图片

    最后贴上整个流程的代码:

    ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第25张图片

    ajax跳转页面_Python爬虫实例--用selenium抓取动态页面_第26张图片

    你可能感兴趣的:(ajax跳转页面,js动态给按钮赋id,ligertoolbar,动态加载按钮,python,selenium)