引入

今日概要

  • 图片懒加载
  • selenium
  • phantomJs
  • 谷歌无头浏览器

知识点回顾

  • 验证码处理流程

今日详情

动态数据加载处理

一. 图片懒加载

案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree

if __name__ == "__main__":
     url = 'http://sc.chinaz.com/tupian/gudianmeinvtupian.html'
     headers = {
         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
     }
     #获取页面文本数据
     response = requests.get(url=url,headers=headers)
     response.encoding = 'utf-8'
     page_text = response.text
     #解析页面数据(获取页面中的图片链接)
     #创建etree对象
     tree = etree.HTML(page_text)
     div_list = tree.xpath('//div[@>)
     #解析获取图片地址和图片的名称
     for div in div_list:
         image_url = div.xpath('.//img/@src')
         image_name = div.xpath('.//img/@alt')
         print(image_url) #打印图片链接
         print(image_name)#打印图片名称

运行结果观察发现,我们可以获取图片的名称,但是链接获取的为空,检查后发现xpath表达式也没有问题,究其原因出在了哪里呢?

图片懒加载概念:

图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。

网站一般如何实现图片懒加载技术呢?

在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

站长素材案例后续分析:通过细致观察页面的结构后发现,网页中图片的链接是存储在了src2这个伪属性中

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree

if __name__ == "__main__":
     url = 'http://sc.chinaz.com/tupian/gudianmeinvtupian.html'
     headers = {
         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
     }
     #获取页面文本数据
     response = requests.get(url=url,headers=headers)
     response.encoding = 'utf-8'
     page_text = response.text
     #解析页面数据(获取页面中的图片链接)
     #创建etree对象
     tree = etree.HTML(page_text)
     div_list = tree.xpath('//div[@>)
     #解析获取图片地址和图片的名称
     for div in div_list:
         image_url = div.xpath('.//img/@src2') #src2伪属性
         image_name = div.xpath('.//img/@alt')
         print(image_url) #打印图片链接
         print(image_name)#打印图片名称

二. selenium

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

1. 环境安装

下载安装selenium:

pip install selenium

下载浏览器驱动程序:

http://chromedriver.storage.googleapis.com/index.html

查看驱动和浏览器版本的映射关系:

http://blog.csdn.net/huilan_same/article/details/51896672

2. 编码流程

- 导包: from selenium import webdriver
- 实例化某一款浏览器对象
- 制定相关的行为动作

3. 简单使用/效果展示

from selenium import webdriver
from time import sleep

# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'./chromedriver.exe')
# 用get打开百度页面
driver.get("http://www.baidu.com")
# 查找页面的“设置”选项,并进行点击
driver.find_elements_by_link_text('设置')[0].click()
sleep(2)
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[0].click()
sleep(2)

# 选中每页显示50条
m = driver.find_element_by_id('nr')
sleep(2)
m.find_element_by_xpath('//*[@>).click()
m.find_element_by_xpath('.//option[3]').click()
sleep(2)

# 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)

# 处理弹出的警告页面   确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep(2)
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep(2)
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_elements_by_link_text('美女_百度图片')[0].click()
sleep(3)

# 关闭浏览器
driver.quit()
import time
from selenium import webdriver

bro = webdriver.Chrome(executable_path="./chromedriver.exe")
bro.get("https://www.baidu.com")
time.sleep(2)

# 标签定位
kw = bro.find_element_by_id('kw')
kw.send_keys("汽车")
time.sleep(2)

btn = bro.find_element_by_id("su")
btn.click()
time.sleep(2)

bro.close()
展示百度搜索

相关文章:

  • 2022-12-23
  • 2021-08-01
  • 2021-09-09
  • 2021-09-26
  • 2022-12-23
  • 2021-11-11
  • 2021-05-06
猜你喜欢
  • 2022-12-23
  • 2021-06-21
  • 2022-01-11
  • 2022-12-23
相关资源
相似解决方案