python动态页面元素爬取_python动态爬取网页
简介
有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得。
这说明我们想要的元素是在我们的某些操作下通过js事件动态生成的。举个例子,我们在刷QQ空间或者微博评论的时候,一直往下刷,网页越来越长,内容越来越多,就是这个让人又爱又恨的动态加载。
爬取动态页面目前来说有两种方法
分析页面请求
selenium模拟浏览器行为
1.分析页面请求
键盘F12打开开发者工具,选择Network选项卡,选择JS(除JS选项卡还有可能在XHR选项卡中,当然也可以通过其它抓包工具),如下图
然后,我们来拖动右侧的滚动条,这时就会发现,开发者工具里出现了新的js请求(还挺多的),不过草草翻译一下,很容易就能看出来哪个是取评论的,如下图
好,复制出js请求的目标url
在浏览器中打开,发现我们想要的数据就在这里,如下图
这整个页面是一个json格式的数据,对于京东来说,当用户下拉页面时,触发一个js事件,向服务器发送上面的请求取数据,然后通过一定的js逻辑把取到的这些json数据填充到HTML页面当中。对于我们Spider来说,我们要做的就是把这些json数据整理提取。
在实际应用中,当然我们不可能去每个页面里找出来这个js发起的请求目标地址,所以我们需要分析这个请求地址的规律,一般情况下规律是比较好找的,因为规律太复杂服务方维护也难。
2.selenium模拟浏览器行为
对于动态加载,能看到Selenium+Phantomjs的强大。打开网页查看网页源码(注意不是检查元素)会发现要爬取的信息并不在源码里面。也就是说,从网页源码无法通过解析得到数据。Selenium+Phantomjs的强大一方面就在于能将完整的源码抓取到
例子:在豆瓣电影上根据给出的名字搜索对应的信息
#-*- coding:utf-8 -*-
importsysfrom selenium importwebdriverfrom selenium.webdriver.common.keys importKeysfrom bs4 importBeautifulSoup
reload(sys)
sys.setdefaultencoding('utf-8')
url= 'https://movie.douban.com/'
#这个路径就是你添加到PATH的路径
driver = webdriver.PhantomJS(executable_path='C:/Python27/Scripts/phantomjs-2.1.1-windows/bin/phantomjs.exe')
driver.get(url)#在搜索框上模拟输入信息并点击
elem = driver.find_element_by_name("search_text")
elem.send_keys("crazy")
elem.send_keys(Keys.RETURN)#得到动态加载的网页
data =driver.page_source
soup= BeautifulSoup(data, "lxml")#进行匹配
for i in soup.select("div[class='item-root']"):
name= i.find("a", class_="title-text").text
pic= i.find("img").get('src')
url= i.find("a").get('href')
rate= ""num= ""
if i.find("span", class_="rating_nums") isNone:print name.encode("gbk", "ignore"), pic, urlelse:
rate= i.find("span", class_="rating_nums").text
num= i.find("span", class_="pl").textprint name.encode("gbk", "ignore"),pic,url,rate.encode("gbk", "ignore"),num.encode("gbk", "ignore")
python动态页面元素爬取_python动态爬取网页相关推荐
- 静态页面和动态页面中的静态和动态到底指的是什么
今天讨论一个话题,这是在考研的专业课考试中的一个问题:静态页面和动态页面的联系和区别 ,这考的我就很猝不及防 ,这个方面虽然以前有了解 ,但是理解得并不深刻,网安方向涉及到的东西太多了,慢慢学习吧~首 ...
- python爬虫什么网站都能爬吗_python如何爬取动态网站
python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的"查看网页源代码&quo ...
- beautifulsoup解析动态页面div未展开_Python爬虫 | 0xb 数据解析:PyQuery库
(给抠腚男孩加星标,提升Python.Android技能) 作者:CoderPig 本节带来数据解析部分最后一个解析库PyQuery,它的API和前端著名框架jQuery相似,名字由此而来.如果你有前 ...
- python跑一亿次循环_python爬虫爬取微博评论
原标题:python爬虫爬取微博评论 python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无 ...
- python做手机应用宝下载_Python代码爬取下载应用宝所有APP软件
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本环境配置 python 3.6 pycharm requests parsel 打开开发 ...
- php动态页面加载慢,通过动态加载JS文件提升网站访问速度
相对与HTML,CSS,javascript是最影响浏览器性能的,因为浏览器在遇到<script>标签时,必须等待js代码下载和执行完毕后再执行后面的内容,因此当页面中js文件过多时,网站 ...
- python网络爬图_Python爬虫爬图片需要什么
Python爬虫爬图片需要什么?下面用两种方法制作批量爬取网络图片的方法: 第一种方法:基于urllib实现 要点如下: 1.url_request = request.Request(url) 2. ...
- html5什么是动态页面,举例说明什么是动态网站、静态网站
记得有一次和一朋友散步,他问到什么是动态网页.什么是静态网页.动态网页与静态网页有什么区别.当时我的回答似乎并没有让他真的明白到底什么是动态.什么是静态,所以今天想在这篇文章中详细的举例说明什么是动态 ...
- python程序语法元素的描述_Python入门——Python程序语法元素
Python程序语法元素 缩进:表达程序的格式框架 严格明确, 缩进是语法的一部分,缩进不正确程序运行错误 所属关系, 缩进是表达代码间包含和层次关系的唯一手段 长度一致, 程序内缩进长度统一 注释: ...
最新文章
- Tools and Strategies for Long-Read Sequencing and De Novo Assembly of Plant Genomes
- 微信样式组件遇到的小坑
- 凭兴趣求职80%会失败,为什么
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
- cad pu插件下载lisp_【技巧】cad计算面积、周长方法汇总
- CSS3 :nth-child(n)使用注意
- 截取字符串,但要保证汉字不被截取半个
- 匿名内部类与Lambda表达式
- Excel的一点小事
- 使用HTML5 canvas做地图(1)基础知识
- 深度学习-吴恩达-笔记-2-神经网络的编程基础
- python isfile_基于Python中isfile函数和isdir函数使用详解
- 2006-8-11 11:29:00 搜索算法及其在ACM竞赛中的应用(作者/刘力科 计算机系01级4班)...
- Unity插件-HighlightingSystem(边缘光)
- Android Binder传递文件描述符原理分析
- python正则匹配内网IP
- 上周内外盘行情回顾及交易情况2022.4.4
- time.h头文件解析
- 帝国cms支付系统的漏单风险
- Acorn Mac 7.1.1