python抓取网页数据(什么是Ajax:javascriptandxml(异步JavaScript和XML)如何快速入门selenium)

优采云 发布时间: 2022-01-26 14:14

  python抓取网页数据(什么是Ajax:javascriptandxml(异步JavaScript和XML)如何快速入门selenium)

  什么是阿贾克斯:

  异步 javascriptandxml(异步 JavaScript 和 XML)。在 Ajax 中,可以通过在后台最小化与服务器的数据交换来异步更新网页。这意味着可以在不重新加载整个网页的情况下更新网页的一部分。如果需要更新传统网页(没有 Ajax)的内容,则必须重新加载整个网页。因为以前数据格式是使用 XML 语法传输的。所以虽然叫AJAX,但实际上现在的数据交换基本都是用JSON。即使AJAX加载的数据使用JS在浏览器中渲染数据,右键-查看网页源代码也看不到AJAX加载的数据,只有这个url加载的html代码。

  

  如何获取ajax数据:

  1、直接分析ajax调用接口。然后使用代码请求这个接口。

  2、使用 Selenium chromedriver 模拟浏览器动作来获取数据。

  

  Selenium chromedriver 获取动态数据:

  Selenium 相当于机器人。可以在浏览器中模拟人类行为并自动处理浏览器中的行为,例如点击、输入数据和删除cookies。Chromedriver是一款可以移动浏览器的手机chrome浏览器驱动。当然,驱动器因浏览器而异。以下是各种浏览器及其相应的驱动程序。

  1、chrome:驱动程序/下载

  2、Firefox:驱动程序/版本

  3、边缘:驱动程序/

  4、safari:driver-support-in-safari-10/

  要安装 Selenium 和 chrome 驱动程序:

  Selenium 安装:Selenium 支持多种语言,包括 java、ruby 和 python。我们只下载python版本。

  pip安装序列号

  安装chromedriver:下载完成后,未经许可放到英文目录下。

  快速开始:

  以轻松获取百度主页为例,展示如何快速上手 Selenium 和 chromedriver。

  

  Selenium 常用操作:

  关闭页面:

  1、driver.close(:关闭当前页面。

  2、driver.quit () : 退出整个浏览器。

  定位要素:

  

  请注意,find_element 是满足条件的第一个元素。find_elements 检索所有满足条件的元素。

  作为表单元素:

  1、操作输入框:分为两个阶段。第一步:找到元素。使用步骤 2 (send_keys(value)) 填充数据。示例代码如下:

  输入标签=driver.find_element_by_id('kw))。

  输入 tag.send_keys (python))。

  可以使用 clear 方法清除输入框的内容。示例代码如下:

  inputTag.clear(

  2、动作复选框:要选择复选框选项卡,请在网页上单击鼠标。所以我想选中复选框

  x标签,然后先选中这个标签,再执行click事件。示例代码如下:

  rememberTag = driver.find_element_by_name("rememberMe")

  rememberTag.click()

  3、Select select:选择元素不能直接点击。因为点击后需要选择元素。这时,selenium 提供了一个类 selenium.webdriver.support.ui.Select 专门用于 select 标签。将获取的元素作为参数传递给此类以创建此对象。您可以稍后使用此对象进行选择。示例代码如下:

  

  4、操作按钮:操作按钮的方式有很多种。比如单击、右键、双击等,这里是最常用的一种。只需点击。直接调用click函数即可。示例代码如下:

  inputTag = driver.find_element_by_id('su')

  inputTag.click()

  行为链:

  有时候页面上的操作可能会有很多步骤,这时可以使用鼠标行为链类ActionChains来完成。例如,现在您想将鼠标移到一个元素上并执行一个单击事件。那么示例代码如下:

  

  还有更多与鼠标相关的操作。

  1、click_and_hold(element):在不释放鼠标的情况下单击。

  2、context_click(element):右键单击。

  3、double_click(element):双击。更多方法请参考:

  Cookie操作:

  获取所有 cookie:

  对于 driver.get_cookies() 中的 cookie:

  打印(饼干)

  根据cookie的key获取值:

  value = driver.get_cookie(key)

  删除所有 cookie:

  driver.delete_all_cookies()

  要删除 cookie:

  driver.delete_cookie(键)

  页面等待:

  今天的网页越来越多地使用 Ajax 技术,因此程序无法确定元素何时完全加载。如果实际页面等待的时间过长,一个dom元素还没有出来,但是你的代码直接使用了这个WebElement,就会抛出NullPointer异常。来解决这个问题。所以 Selenium 提供了两种等待方式:一种是隐式等待,另一种是显式等待。

  隐式等待:调用 driver.implicitly_wait。然后它将等待 10 秒,然后再获取不可用的元素。示例代码如下:

  

  显式等待:显式等待是表示在执行获取元素的操作之前满足一定条件。还可以指定等待的最长时间,超过这个时间就抛出异常。显示等待应使用 selenium.webdriver.support.excepted_conditions 和 selenium.webdriver.support.ui.WebDriverWait 预期的条件完成。示例代码如下:

  

  其他一些等待条件:

  1、presence_of_element_located:元素已加载。

  2、presence_of_all_emement_located:页面中所有满足条件的元素都被加载。

  3、element_to_be_cliable:一个元素是可点击的。

  切换页面:

  有时窗口中有很多子标签页。肯定是时候换了。Selenium 提供了一个叫做 switch_to_window 的开关来切换,可以从 driver.window_handles 中找到要切换到哪个页面。示例代码如下:

  self.driver.switch_to_window(self.driver.window_handles[1])

  设置代理ip:

  有时某些网页被频繁爬取。服务器发现你是爬虫后,会屏蔽你的IP地址。这时候我们可以更改代理ip。更改代理ip,不同的浏览器有不同的实现。以下是 Chrome 浏览器的示例:

  

  WebElement 元素:

  from selenium.webdriver.remote.webelement import WebElement 类是每个检索到的元素所属的类。

  有一些常用的属性:

  1、get_attribute:这个标签的一个属性的值。

  2、screentshot:获取当前页面的截图。此方法只能在驱动程序上使用。

  驱动的对象类也是继承自WebElement。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线