爬虫--04:动态网页爬取(ajax)

本文介绍了如何使用selenium爬取动态网页数据,包括selenium背景及介绍、PhantomJS快速入门、定位元素、操作表单、处理select下拉菜单、模拟鼠标行为、获取和操作cookie、处理页面等待以及在12306网站的实战案例。
摘要由CSDN通过智能技术生成

selenium

在这里插入图片描述

一、selenium背景及介绍

  • 我们以前爬取的数据大多是一些静态页面,说白了就是这些数据都在网页源码中。直接解析网页源码就可得到想要的数据。
  • 除了静态页面,还有一些页面或者网站的数据不在网页源码中,那么这些数据有可能是通过ajax加载出来的。
    什么是ajax?
  • 是前端的技术
  • 页面中有我我们想要的数据,但是网页源码中没有我们需要的数据
    • 直接分析ajax接口,通过代码来请求接口,获取真实的数据
      • 分析数据接口比较麻烦
      • 代码编写比较容易
    • 通过selenium和chromedriver来模拟浏览器从而获取数据
      • 直接通过selenium来模拟人来获取数据的行为
      • 代码量大,代码编写困难
    • 下载地址:

二、Phantomis快速入门

代码演示:

import time
from selenium import webdriver


# 加载驱动
# 如果驱动没有配置到环境变量,你就需要制定这个驱动的路径
# driver = webdriver.PhantomJS(r'C:\Users\王佳欣的windows\Desktop\phantomjs.exe')

driver = webdriver.PhantomJS()

# 加载网页
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('python')
# 找到su并点击
driver.find_element_by_id('su').click()
time.sleep(2)
# print(driver.page_source) # 得到网页源码
print(driver.current_url) # 查看当前请求的url
driver.save_screenshot('baidu.jpg')

三、selenium快速入门

import time
from selenium import webdriver


# 加载驱动
driver=webdriver.Chrome()
# 加载网页
driver.get('https://baidu.com/') #直接打开了网站
driver.maximize_window() # 窗口最大化
time.sleep(3)

driver.close() # 作用是关闭当前窗口
time.sleep(1)

# python提供的驱动退出
driver.quit()# 作用关闭浏览器

四、定位元素

  • find_element_by_id:根据id来查找某个元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)

# find_element_by_id:根据id来查找某个元素
drvier.find_element_by_id('kw').send_keys('王佳欣') # 第一种方法
# drvier.find_element(By.ID, 'kw').send_keys('李蕊') # 第二种方法
  • find_element_by_class_name:根据类名查找元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)


# find_element_by_class_name:根据类名查找元素
drvier.find_element_by_class_name('s_ipt').send_keys('李蕊') # 第一种方法
drvier.find_element(By.CLASS_NAME, 's_ipt').send_keys('李蕊') # 第二种写法
  • find_element_by_name:根据name属性的值来查找元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)

# find_element_by_name:根据name属性的值来查找元素
# drvier.find_element_by_class_name('wd').send_keys('李蕊') # 第一种方法
drvier.find_element(By.NAME, 'wd').send_keys('李蕊') # 第二种方法
  • find_element_by_tag_name:根据标签名来查找元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)


# find_element_by_tag_name:根据标签名来查找元素
head = drvier.find_element_by_tag_name('head')
print(head)
  • find_element_by_xpath:根据xpath语法来获取元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)

# find_element_by_xpath:根据xpath语法来获取元素
drvier.find_element_by_xpath('//input[@id="kw"]').send_keys('景甜')
  • find_elements_by_css_selector:根据css来定位元素
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)

# find_elements_by_css_selector:根据css来定位元素
drvier.find_elements_by_css_selector('.s_ipt').send_keys('李蕊')

五、操作表单元素

  • send_keys() 设置内容
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 加载驱动
drvier = webdriver.Chrome()
# 加载网页
drvier.get('https://www.baidu.com/')
time.sleep(2)

# send_keys()清空内容
input_Tag = drvier.find_element_by_id('kw')
input_Tag.send_keys('李蕊')
  • clear()清空内容
from selenium import webdriver
import time

drvier = webdriver.Chrome()
drvier.get('https://www.baidu.com/')

# drvier.find_element_by_id('su') # 找到百度一下按钮
# drvier.find_element_by_id('wrapper').send_keys('王佳欣') # 报错,原因是wrapper不是inpmt标签


# send_keys() 设置内容
input_Tag = drvier.find_element_by_id('kw')
input_Tag.send_keys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值