python网络爬虫学习笔记(6)动态网页抓取(一)知识
文章目录
- 网络爬虫学习笔记(2)
- 1 资料
- 2 笔记
- 2-1 动态抓取概述
- 2-2 通过浏览器审查元素解析真实网页地址
- 2-3 网页URL地址的规律
- 2-4 json库
- 2-5 通过Selenium模拟浏览器抓取
网络爬虫学习笔记(2)
1 资料
- 《Python网络爬虫从入门到实践》唐松,陈志铨。主要面向windows平台下的python3。
2 笔记
2-1 动态抓取概述
在使用JavaScript时,很多内容并不会出现在HTML源代码中,所以爬取静态网页的技术可能无法正常使用。因此,我们需要用到动态网页抓取的两种技术:通过浏览器审查元素解析真实网页地址和使用selenium模拟浏览器的方法。
- 异步更新技术AJAX(Asynchronous Javascript And XML,异步JavaScript和XML),通过在后台与服务器进行少量数据交换就可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下对网页的某部分进行更新。例如百度搜索界面的皮肤:
- 爬取里面使用AJAX动态加载的内容的两种方法:
(1)通过浏览器审查元素解析地址。
(2)通过Selenium模拟浏览器抓取。 - json数据直接打印显得又多又乱,可以使用json库提取想要的信息
2-2 通过浏览器审查元素解析真实网页地址
- chrom浏览器右键菜单“检查”
- 单击“Network”选项,然后刷新网页。此时,Network会显示浏览器从网页服务器中得到的所有文件,一般这个过程称为“抓包”。
- 找到真实的数据地址。选择需要的文件,单击Preview标签即可查看数据,而Headers标签里则可以找到数据地址(就是Request URL那一项)。
- 获得了地址,再想爬取就只用把link换成3里找到的数据地址。
2-3 网页URL地址的规律
例如有些URL地址中有两个特别重要的变量offset和limit,offset显示本页第一项是总的第几项,limit表示每页项目数。基于此,书中给了一个很好的例子(这个例子中,不同页数的评论真实地址之间只体现在offset,所以才有page_str这个变量):
2-4 json库
- 使用:
(1)引入json库import json
(2)使用json.loads把字符串格式的响应体数据转化为json数据json_date = json.load(req_1.text)
2-5 通过Selenium模拟浏览器抓取
使用本方法无需2-1的操作,直接用网页网址即可
因此,这里介绍另一种方法,即使用浏览器渲染引擎。直接用浏览器在显示网页时解析HTML、应用CSS样式并执行JavaScript的语句。
这个方法在爬虫过程中会打开一个浏览器加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来。用一句简单而通俗的话说,就是使用浏览器渲染方法将爬取动态网页变成爬取静态网页。
我们可以用Python的Selenium库模拟浏览器完成抓取。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,浏览器自动按照脚本代码做出单击、输入、打开、验证等操作,就像真正的用户在操作一样。
- 安装
pip install selenium
- 下载geckodriver,在环境变量的PATH中加入这个geckodriver的地址
- 要使用浏览器,可能会需要相应的driver,例如Chromedriver。关于Chromedriver的下载,可以参考这个博客:
ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接 - 上述内容的简单例子:
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
# 产生DesiredCapabilities()对象,并修改对应字典的默认值,不过对于使用chrom暂时没什么用
caps = webdriver.DesiredCapabilities().CHROME
# 要调用的浏览器driver地址,根据浏览器不同实现方式会有所差别
# chrom.webdriver里对应的参数需要的是一个字符串,如果不给数据它会去找$PATH
executable_path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
# 产生对象
driver = WebDriver(executable_path=executable_path)
driver.get('https://greasyfork.org/zh-CN/scripts')
- 书中给的例子仍旧是评论,在driver调用get()以后,
driver.find_element_by_css_selector
表示用CSS选择器查找元素,找到class为bdy-inner的div元素;find_element_by_tag_name
表示通过元素的tag寻找,意思是找到comment中的p元素。
具体增加代码
检查可以看到的内容
运行上述代码,得到的结果是:“第35条测试评论” - 书中还提及单击特定位置的方法:
使用driver.find_element_by_css_selector()
(还有许多其他查找方法,这里只提这一种)找到该元素,然后使用.click()
方法模拟单击
load_more = driver.find_element_by_css_selector('div.tie-load-more')
load_more.click()
- Selenium中通过
find_element_by_xpath()
和find_element_by_css_selector()
查找比其他查找函数好一些。 - Selenium常见的操作元素方法
·Clear
清除元素的内容。·send_keys
模拟按键输入。·Click
单击元素。·Submit
提交表单。 - 用Selenium控制浏览器加载的内容(火狐使用
FirefoxProfile().set_preference()
函数调整),可以加快Selenium的爬取速度,常用的方法有:
(1)控制CSS(用来控制页面的外观和元素放置位置的)的加载。
(2)控制图片文件的显示。
(3)控制JavaScript的运行。 - Selenium的官方网站
python网络爬虫学习笔记(6)动态网页抓取(一)知识相关推荐
- python网络爬虫学习笔记(7)动态网页抓取(二)实践
文章目录 1 资料 2 笔记 2-1 准备 2-1-1. 网址 2-2-2 文本位置 2-2 代码 2-2-1 原型 2-2-2 ver0.1 1 资料 <Python网络爬虫从入门到实践> ...
- Python网络爬虫学习笔记(二)基本库的使用
基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...
- python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...
标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...
- python 网络爬虫学习笔记(一)
为了方便,在Windows下我用了PyCharm,个人感觉这是一款优秀的python学习软件.爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去 ...
- python网络爬虫学习笔记(二):爬虫基本概述
1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...
- python网络爬虫学习笔记(三):urllib库的使用
文章目录 使用urllib库 1.urllib.request.urlopen()函数 urlopen()函数API: 2.urllib.request函数 验证 Cookies 保存Cookies ...
- python网络爬虫学习笔记(十一):Ajax数据爬取
文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...
- python网络爬虫学习笔记(六):Requests库的使用
文章目录 1.基础操作 1.1 GET请求 1.2 post请求 1.3 响应 2.高级用法 1.1 文件上传 2.2 Cookies 2.3 会话维持 2.4 SSL证书验证 2.5 代理设置 2. ...
- python网络爬虫学习笔记(十):数据存储
文章目录 1.文本存储 2.JSON文件存储 2.1 读取JOSN 2.2 输出JSON 3.CSV文件存储 3.1 写入 3.2 读取 1.文本存储 import requests from pyq ...
最新文章
- DotNet关键知识点——WCF篇(六)
- Xtreme.Toolkit.Pro编译简单教程
- 英特尔新任 CEO 的“开挂”人生
- FPGA设计中MEMORY型数据怎么综合到blockRAM里面(二)
- 跟我一起写 Makefile(整理版)
- linux下安装wls1036_generic.jar,weblogic 安装
- 【lucene】lucene高亮显示
- 如何用Eclipse进行单元测试
- python scipy库函数solve用法_python scipy linalg.solve_banded用法及代码示例
- 网易邮箱已经变成无限空间了
- 快嘴企业名录搜索 2007 是什么
- 【数据安全】4. Android 文件级加密(File-based Encryption)之密钥管理
- 自己整理出来的java实现打印机打印小票
- 瑞吉外卖项目——瑞吉外卖
- 2019阿里java面试题
- SKNet: Selective Kernel Networks
- HTML 渲染组件出错,这个问题可以通过安装某个缺失组件来解决。您是否想要了解详细信息? 的解决办法
- level 1与level 2的区别
- asyncio call_at,call_soon和call_later用法
- Matlab的D算法
热门文章
- 电动车智能头盔(自行车智能头盔)方案
- Windows 网络与通信程序设计 王艳平 Phoenix 金羽 防火墙
- 米家扫地机器人沒有系统重置键_小米扫地机重置系统的作用?小米扫地机器人按键布局及功能介绍...
- php云人才系统漏洞,php云人才系统 注入漏洞
- 学习笔记:《数字媒体技术概论》-1/10 数字媒体技术基础-中国大学慕课公开课
- 商业图表案例10.2-重庆的日照
- 浙江大学计算机考研资料汇总
- 有道云笔记网页版(Cloud notes page)
- vue 得到当月的天数getDate()方法
- Python具备哪些优势 为何人工智能首选Python