- N +

bjd娃娃,网络爬虫:Python动态网页爬虫2种技能方法及示例,君子一诺

原标题:bjd娃娃,网络爬虫:Python动态网页爬虫2种技能方法及示例,君子一诺

导读:

动态网页技术介绍动态网页爬虫技术一之API请求法动态网页爬虫技术二之模拟浏览器法安装selenium模块下载GoogleChromeDriver安装ChromeDriver以某...

文章目录 [+]

作者:糖甜甜甜

https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug

网络爬虫:Python动态网页爬虫2种技术办法及示例

这一讲,我将会为咱们解说略微杂乱一点的爬虫,即动态网页的爬虫。

动态网页技术介绍

动态bjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺网页爬虫技术一之API恳求法

动态网页爬虫技术二之模仿浏览器法

装置selenium模块下载

Google Chrome Driver装置

ChromeDriver以某宝某只松鼠店肆为例爬取"坚果炒货"的产品黄晓明植发前后相片称号、价格、销量以及谈论数量

课后作业

关于作者

动态网页技术介绍

所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,跟着html代码的生成,页面的内容和显现作用就基本上不会发作改动了——除非你修正页面代码。而动态网页则否则,页面代码尽管没有变,可是显现的内容却是能够跟着时刻、环境或许数据库操作的成果而发作改动的淑女花苑。

值得着重的是,不要将动态网页和页面内容是否有动感相提并论。这儿说的动态网页,与网页上的各种动画、翻滚字幕等视觉上的动态作用童理民没有直接关系,动态网页也能够是纯文字内容的,也能够是包含各种动画的内容,这些仅仅网页详细内容的体现办法陈凯霖微博,不管网页是否具有动态作用,只需是选用了动态网站技术生成的网页都能够称为动态网页。(解说来历:百度百科 - “动态网页”,若链接失效请拜访:https://b狙击女神天使aike.baidu.com/item/%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)

互联网每天都在繁荣的开展,数以万计的在线渠道如漫山遍野般不断涌现,不同渠道对不同用户的权限、喜爱推出不同的个性化内容,传统的静态网页如同早已不能满意社会的需求。所以,动态网页技术应运而生,当然,在现在人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比方各大电商渠道、知识型网站、交际渠道等,都广泛选用了异步加载的动态技术。简略来说,便是把一些根据时刻、恳求而改动的内容,比方某宝的产品价格、谈论,比方某瓣的抢手电影谈论,再比方某讯的视频等,选用先加载网页全体结构,后加载动态内容的办法出现

关于这一类动态页面,假如咱们选用前面所说的抵挡静态网页的爬虫办法去爬,或许收成不到任何成果,由于这些异步加载的内容地点的方位大多是一段恳求内容的JS代码。在某些触发操作下,这些JS代码开端作业,从数据库中提取对应的数据,将其放置到网页结构中相对应的方位,然后终究拼接成咱们所能看到的完好的一张页面。

动态网页爬虫技术一之API恳求法

看似愈加杂乱的操作如同给咱们的爬虫带来了很大的困扰,但其实也或许给咱们带来极大的便当。咱们只需求找到JS恳求的API,并按照必定的要求发送带有有用参数的恳求,便能取得最为高羽烨整齐的数据,而不必像曾经那样从层层嵌套的HTML代码中渐渐解分出咱们想要的数据

这儿咱们以上面说到的豆瓣电影(若链接失效田加童请拜访:https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个剖析,提取出热度排名前100的电影称号和评分以及在豆瓣的地址。

这是最近抢手电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会跟着口碑效应每天出现不同的热度排序,假如这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修正这个页面。所以,咱们能够斗胆的猜想,这是个动态页面。可是光猜不可,咱们还得证明。这儿就要用到第二讲讲到的谷歌开发者东西了。按下F12或许在网页空白处右键挑选检查(N),或许在键盘上按下组合键Ctrl + Shift + I,召唤出咱们的神器。如下图所示:

今日咱们不再运用左上角的鼠标按钮了,而是运用赤色框中的Network,这儿显现的是网页加载出来的一切的文件,如下图所示:

假如下方没有任何成果,需求在翻开谷歌开发者东西的状况下改写网页。

如上图所示,咱们点击上方赤色小框中的”XHR“bjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺按钮,就能够将这张网页中异步加载的内容挑选出来。至于究竟哪一个才是咱们所要的,这是个问题,看左面的地址咱们如同也看不出神马条理,那就一个一个点出来看吧。。。通过枚举,咱们发现,第三个是咱们要的内容,它的内容如下图:

咱们能够看到,这个链接里包含的内容是以JSON格局展现出来的,这时咱们便有了一个大约的思路,那便是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。

可是,这如同是一页的内容,数一数也只需20部电影,咱们想要的是排名前100的电影,这怎么办呢?

不方,毕竟是动态网页,内容都是能够根据恳求改动的,而且这儿也没有登陆啥的操作,翻开网页就能看到,那咱们是不是能够改动一下URL然后获取到下一页乃至下下页的内容咧?当然能够,否则我就写不下去了!

咱们仔细观察一下这个URL里传递的参数:

到这儿咱们或许还不知道这五个参数是干嘛的,但咱们能够找规则啊,所以现在回到原始的网页,点击页面下方的"加载更多",再回来到开发者东西,哇,多出了一个URL,长的跟折纸骷髅人方才说的那个如同,内容也长的如同:

这个URL相同传递了五个参数:

仅有的不同便是一个叫"page_start"的关键字的值改动了,简略翻译一下大约是页面起点的意思,再看上面的"page_limit",大约便是页面约束的意思,看右边的呼应内容,这一个页面传递了20个条目,也便是说"page_limit"是一个页面里条目数量的约束,也便是20条,这个数据是不变的,而"page_start"是这一页开端的条目序号,那么咱们要获取后边的内容,岂不是只需改动一下这个"page_start"就好了?是的。

老规矩,先写个代码压压惊

# -*- coding: utf-8 -*-
import requests
import jsonfor i in range(5):
page_start = str(i * 20) # 注释1
url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_lim莱巴里科娃it=20&page_start=' + 金策工业综合大学page_start # 注释2
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
response = requests.get(url亚洲热=url, headers=headers, verify=False)
content = response.content.decode()
content_list = json.loads(content)['subjects'] # 注释3for item in content_list: # 注释4
title = item沙里瓦是什么意思['title'] #注释5
rate = item['rate'] # 注释6
link = item['url'] # 注释7
print(title, rate, link)
  • 注释1:由于一页有20条数据,咱们要爬取100条,而page_start的开端数据是0,因而咱们这儿只需求用一个i,从0到4循环5次清风欲孽,每一次乘以20便能够轻松的设置pagbjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺e_start的值了,由于后边的URL是个字符串类型,这儿进行乘法运算后咱们用str()办法进行类型转化,转化成str类型,便利后边的调用。
  • 注释2:这儿咱们每一次循环只需改动page_start的值就好了,所以在最终修正这个值;
  • 注释3:回来的content通过decode()办法解码,变成了一个字符串类型,根据咱们前面的剖析,得出这是一个JSON格局的字符串,因而,咱们用Python内置的规范库json来进行解析,规范库就不需求用pip东西进行装置了。json模块有两个首要办法———json.loads()json.dumps(),前一个是用来解码JSON数据的,后一个则是编码成JSON数据的。这儿咱们首要用到loads()办法,将content解析成一个字典格局的内容,存储在名为content_list的目标里,最终加上“[‘subjects’]”是用来解分出咱们要的最简练的部分,这个根据详细的内容来定,不是一切的解析都要这么写。比方这儿,如下图:


  • 咱们要的内容最外面有这么一个嵌套,这bjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺个嵌套的Key为”subjects”,这个Key的值为一个数组,这个数组才是咱们要的,因而加上了“[‘subjects’]”
  • 注释4:content_list是一个数组目标,因而咱们也做一个循环,分条提取。
  • 注释5:每一条数据仍然是个字典类型的目标,因而咱们能够直接写对应的Key名得到想要的值,这儿得到的电影的称号;
  • 注释6:同5,这儿得到的是电影的评分;
  • 注释7:同5,这儿得到的是电影的豆瓣链接;

最终的话,咱们能够选用规范输入流写入txt文件,也能够选用xlwt模块写入EXCEL,还能够运用比方pymysql模块写入Mysql数据库,详细的办法咱们随意,运用办法请自行百度。

到这儿,这种选用寻觅API并传递有用参数重放API的办法便为咱们介绍完了,这是个很通用的办法,在许多网站都可bjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺以这样运用,而且速度很快,成果最精简。

动态网页爬虫技术二之模仿浏览器法

上面咱们所讲的API恳求法尽管好用且快,可是并不是一切的网站都会选用这种异步加载的办法来完结网站,一起还有部分网站会针对爬虫采取反爬虫办法,比方常见的验证码,尽管验证码首要是用来防止CSRF进犯的,但也有网站用来处理爬虫,比方某宝。这时分,就要为咱们介绍另一个神器了,Python的Selenium模块。

Selenium是一个用于Web应用程序测验的东西。Selenium测验直接运转在浏览器中,就像真实的用户在操作相同。支撑的浏览器包含IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个东西的首要功用包含:测验与浏览器的兼容性——测验你的应用程序看是否能够很好得作业在不同浏览器和操作体系之上。测验体系功用——创立回归测验查验软件功用和用户需求。支撑主动录制动作和主动生成 .Net、Java、Perl等不同言语的测验脚本。(解说来自:百度百科 - “Selenium”,若链接失效请点击https://baike.baidu.com/item/Selenium/18266?fr=aladdin)

简略的说,Selenium是一个首要用来进行主动化测验的东西,它能够合作浏览器驱动在各个浏览器中运转,按照代码主动地模仿人的操作,去获取网页元素或对网页元素进行操控。当然,Selenium并不是Python的产品,而是一个独立的项目,Python对Selenium供给支撑。(咱们能够自行拜访Selenium的主页进行拜访,若链接失效请点击http://www.seleniumhq谷露.org/)

装置selenium模块

要运用Selenium这种第三方的东西,咱们首要要进行装置,这儿仍然用到pip东西。在管理员权限下运转指令行,输入pip install selenium,稍等片刻后便能够完结装置,假如觉得网络连接官方pypi镜像速度较慢,能够运用国内豆瓣的镜像源,pip install selenium -i https://pypi.douban.com/simple/,加上这个-i参数和豆瓣pypi镜像的地址就能够了,假如想要默许运用豆瓣镜像源,请自行百度修正办法。

下载Google Chrome Driver

在装置成功后,咱们就需求装置下一个必要的东西了,浏览器驱动,前面说过,selenium需求合作浏览器驱动运转,因而我张玉贞国语版全集们以装置Google Chrome Driver为例。

首要,咱们需求检查自己的谷歌浏览器版别,这个在谷歌的”协助”中能够检查,详细办法是,翻开Chrome,点击右上角的三个点状的按古怪的苏夕小说原文钮,接着在弹出的菜单中顺次挑选协助(E) -> 关于 Google Chrome(G)如下图所示:

作者的浏览器是更新到当时最新的版别63的,旧版别的操作办法大致共同。

点开关于省棋王讲棋信息后,咱们能够看到当时的Chrome版别,以下图为例:

Chrome一直在晋级,因而对应的驱动也得不断晋级,而且与Chrome版别相适应。这儿咱们需求查找相应的ChromeDriver版别映射,给咱们引荐一个继续更新的CSDN博客(若链接失效请点击:http://blog.csdn.net/huilan_same/article/detabjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺ils/51896672),根据版别映射表,下载对应版别的ChromeDriver,下载bjd娃娃,网络爬虫:Python动态网页爬虫2种技术办法及示例,正人一诺地址1 (http://chromedriver.storage.googleapis.com/index.html)(若链接失效请拜访:http://chromedriver.storage.googleapis.com/index.html),下载地址2(http://npm.taobao.org/mirrors/chromedriver/)(若链接失效请拜访:http://npm.taobao.org/mirrors/chromedriver/)。

装置ChromeDriver

这儿需求进行环境变量的装备,如第一讲所说,为”Path”增加一行值。

首要,咱们需求找到Chrome的装置方位,最为简略的办法是,在桌面找到Google Chrome的快捷办法,右键挑选”翻开文件地点的方位“,就能翻开了。比方我这儿翻开的途径为C:\Program Files (x86)\Google\Chrome\Application,那么我就将这个途径增加到Path里。然后,需求咱们将下载的ChromeDriver解压到exe程序,将独自的exe程序复制到方才这个途径里,如下图所示:

到这儿,ChromeDriver便完结了装置,咱们能够在指令行输入指令python,进入到python交互环钙圈和枕秃的差异图片境进行测验,如下图所示:

假如你的谷歌浏览器主动翻开,而且跳转到百度主页,那么Congratulations~

以某宝某只松鼠店肆为例爬取”坚果炒货”的产品称号、价格、销量以及谈论数量

该页面的URL为:https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav

老规矩,先放一段代码:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Chrome() # 注释1
url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'
driver.maximize_window() # 注释2
driver.get(url) # 注释3
dl_list = driver.find_elements_by_class_name('item') # 注释4
for dl in dl_list:
name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text # 注释5
price = dl.find_element_by_class_name('cprice-area').text # 注释6
sale = dl.find_element_by_class_name('sale-area').text # 注释7
comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text # 注释8
print(name, price, sale, comment)
driver.close() # 注释9
  • 注释1:实例化了一个webdriver的Chrome目标,命名为driver,这时会有一个Chrome窗口主动翻开。
  • 注释2:调用了driver的maximize_window()办法,直接翻译便是最大化窗口,也便是这个功用,这句写不写不重要,作者写仅仅觉得看的清楚点。
  • 注释3:调祝贵泽用了driver的get()办法,以get办法恳求URL。
  • 注释4:这儿开端是要点,webdriver首要有八种查找元素的办法,这一行是选用class_name的办法进行查找,而且留意到elements这儿的复数,这个办法用来查找页面上一切的契合条件的元素,假如是没有s的办法就只能找到首个契合条件的元素,这一行是运用谷歌开发者东西的左上角小箭头东西对元素进行审阅,并找出一切的产品条目,其间一个条目规模如下图所示:


  • 注释5:同注释4,但这儿选用的是css_selector,即css挑选器的办法进行查找,由于这儿的类名”item-name J_TGoldData”是个复合结构,而find_element_by_class_name()办法不支撑复合结构的查找,所以只能选用css_selector这种办法。
  • 注释6:同注释4,这儿是奇数,即在一个产品条目的规模内查找一次。
  • 注释7:同注释6。
  • 注释8:同注释4,但这儿选用的是xpath的办法查找。

XPath即为XML途径言语,它是一种用来确认XML(规范通用符号言语的子集)文档中某部分方位的言语。XPath根据XML的树状结构,有不同类型的节点,包含元素节点,特点节点和文本节点,供给在数据结构树中找寻节点的才能。起先 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。可是 XPath 很快的被开发者选用来当作小型查询言语。(解说来自:百度百科 - “XPath”,若链接失效请拜访:https://baike.baidu.com/item/XPath/5574064?fr=aladdin)

  • 取得元素xpath的办法有几种,最为简略的一种,即在谷歌开发者东西面板上挑选要查找的元素,右键挑选Copy -> Copy XPath,如下图所示:


  • 当然这种办法或许存在缺点,即取得的XPath或许过于繁琐,也或许获取的XPath无法正确查找到相应的元素,这都需求手动的根据XPath的语法去修正。
  • 注释9:最终必定要记住封闭实例化的目标,这时分由程序翻开的浏览器也会随之封闭。

这个比如最终的成果如下图:

咱们仍然能够自在的挑选数据存储办法。

这儿要留意的是:运用selenium进行数据爬取比较前面的API恳求法或许会慢的多,在翻开到对应的窗口后,也或许窗口很长时刻没有任何动作,但这不必定是犯错或许是程序卡死的体现,也或许是程序在张狂的查找网页元素,在这个过程中,假如不确认是否犯错,请最好不要进行其他操作,防止有些时分形成元素失掉焦点,导致莫名的过错。

当然了,selenium的功用远不止如此,简直人能在网页上做出的行为,它都能模仿,包含点击、输入等各种行为,这个比较适用于某些网站要填写验证码的状况,更多风趣的内容咱们能够自行发现。本讲就写到这儿。感谢咱们的耐性阅览。

课后作业

这儿给咱们留两个小作业,感兴趣的能够自行测验。

  1. 请咱们运用API恳求法自行在QQ音乐上找一首收费下载的歌曲,在不登录账号的状况下对这首歌曲进行下载操作。
  2. 请咱们运用selenium爬取知乎主页的抢手论题或论题答复100条。

关于作者

作者是一名行将结业的大四学生,自学爬虫并作为数个爬虫项目的首要开发者,对各种爬虫有必定的了解和项目经历,现在正在自学分布式爬虫的内容,也将在后边连续为咱们更新。一起作者也是一个疯狂的信息安全爱好者。感谢咱们的支撑。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇: