爬虫Selenium与Ajax


现在大部分的网站,都使用一种叫做Ajax的技术来加载一些数据,简单的爬虫爬取的界面是没有Ajax加载的界面。简单爬虫无法直接获取Ajax加载的数据,还有去获取Ajax的URL再去获取里面的数据
获取AjaxURL时我们发现AjaxURL有以下缺点:

  1. 既冗长又复杂
  2. 经过加密
  3. 具有时效性
    解决方法:
    我们使用到Selenium来就可以获取所有HTML原码。

Ajax

  1. 更好的用户体验

    无需频繁手动重新刷新整个页面,减少了页面加载的等待时间,大大提升了用户体验,增加用户粘性。

  2. 节省流量

    由于只更新了局部页面的数据,相对加载整个页面来说,大大节省了流量,减轻了服务器的负担。

Ajax概念

Ajax,全称Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是新的编程语言,而是利用JavaScript在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容的技术。

Ajax三个步骤

  1. 发送请求

当页面的某个地方需要更新数据时,会向服务器发送Ajax请求,请求的最底层是通过JavaScript实现的。

  1. 解析内容

服务器发送响应内容,可能是HTML代码或者JSON数据。使用JavaScript处理响应数据。

  1. 渲染网页

JavaScript有改变网页内容的能力,解析完响应内容之后,就可以调用JavaScript来针对解析完的内容对网页进行下一步处理了。

Selenium

Selenium 是一个用于Web应用程序测试的工具,它直接运行在浏览器中,就像真正的用户在操作一样。通俗点讲,它能直接驱动浏览器,模拟人的各种操作行为,如下拉、鼠标点击、键盘输入、拖拽等操作。最后可以获取页面渲染后的HTML代码。

使用方法

  1. 安装Selenium 库
pip install selenium 
  1. 检查自己的浏览器版本(这里用谷歌浏览器)
    1)查看Chrome浏览器的版本。
    1
    2)下载Chromedriver。
    官方下载地址:https://chromedriver.storage.googleapis.com/index.html
    其他下载地址:http://npm.taobao.org/mirrors/chromedriver/
    3)配置环境变量。

Anaconda3中:将下载得到的chromedriver.exe文件拖到Anaconda3的Scripts目录下就可以了,如:C:\Anaconda3\Scripts下。
Pycharm中:放至代码的同级目录中。

  1. 编写入门案例
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

# 实例化浏览器对象
broswer = webdriver.Chrome()
# 向指定url发起请求
broswer.get(url="https://www.baidu.com/")

# 使用set_window_size()方法设置浏览器窗口大小
broswer.set_window_size(600, 600)
# 使用find_element_by_id()方法定位到搜索框
input = broswer.find_element_by_id("kw")
# 输入Python
input.send_keys("Python")
# 按下回车
input.send_keys(Keys.ENTER)
# 等待10s
sleep(10)
# 关闭浏览器
broswer.quit()

声明浏览器对象

from selenium import webdriver

driver = webdriver.Chrome() #声明Chrome浏览器对象
driver = webdriver.ie() #声明ie浏览器对象
driver = webdriver.firefox() #声明firefox浏览器对象
driver = webdriver.phantomjs()#声明phantomjs浏览器对象
driver = webdriver.safari() #声明safari浏览器对象

定位元素

以下为Selenium查找单个节点的方法。

find_element_by_id:通过ID查找
find_element_by_name:通过NAME查找
find_element_by_xpath:通过xpath选择器查找
find_element_by_link_text:通过链接的文本查找(完全匹配)
find_element_by_partial_link_text:通过链接的文本查找(部分匹配)
find_element_by_tag_name:通过标签名查找
find_element_by_class_name:通过CLASS查找
find_element_by_css_selector:通过css选择器查找

访问页面

driver.get(“https://www.baidu.com/”)#请求页面

获取页面代码

获取代码

HTML=driver.page_source

页面交互

Selenium可以模拟用户对页面执行一系列操作,如输入数据、清除数据、单击按钮等。以下代码实现了定位到搜索框后,清空搜索框中的文字,输入“iphone”,回车的功能。

input = driver.find_element_by_id(“searchKeywords”)#查找节点input.clear()#清除输入框中默认文字input.send_keys(“iphone”)#输入框中输入“iphone”input.send_keys(Keys.RETURN)#回车功能

执行JavaScript

Selenium并未提供所有的页面交互操作方法,例如爬虫中用得最多的下拉页面(用于加载更多内容)。Selenium提供了execute_script()方法,用于执行JS,这样我们就可以通过JS代码实现这些操作了。以下代码实现了将页面下拉到底部的功能。

driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight)’)

selenium获取国家药监局首页的企业信息

from selenium import webdriver
from lxml import html

browser = webdriver.Chrome()
browser.get("http://scxk.nmpa.gov.cn:81/xk/")
# 获取HTML源码
page_text = browser.page_source
# 用xpath进行解析
# 实例化
etree = html.etree
tree = etree.HTML(page_text)

list_text = tree.xpath("//ul[@class='hzblist']/li/dl/@title")

for text in list_text:
    print(text)


browser.quit()


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liaoMITC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值