PythonSelenium爬虫实战应用
本节讲解PythonSelenium爬虫实战案例,通过对实战案例的讲解让您进一步认识Selenium框架。
实战案例目标:抓取京东商城(https:www。jd。com)商品名称、商品价格、评论数量,以及商铺名称。比如输入搜索Python书籍,则抓取如下数据:{name:Python编程从入门到实践第2版人民邮电出版社,price:52。50,count:200条评价,shop:智囊图书专营店}{name:Python编程从入门到实践第2版(图灵出品),price:62。10,count:20万条评价,shop:人民邮电出版社}。。。123复制代码类型:〔python〕
Selenium框架的学习重点在于定位元素节点,关于如何定位,我们已经介绍了8种方法,其中Xpath表达式适用性强,并且便捷。因此,建议大家多多熟悉Xpath表达式的相关语法规则。本节案例中很大一部分采用了Xpath表达式定位元素,希望帮助您温故知新。
本节案例中涉及了几个技术难点:第一,如何下拉滚动条下载商品,第二,如何实现翻页,也就是抓取下一页的内容,第三,如何判断数据已经抓取完毕,即终止页。下面我们逐步讲解。实现自动搜索
实现自动输出、自动搜索是最基础的一步。首先定位输入框的的节点,其次定位搜索按钮节点,这与实现百度自动搜索思路一致,最关键就是要正确定位元素节点。
通过开发者调试工具检查相应的的位置,可得如下Xpath表达式:输入框表达式:〔idkey〕搜索按钮表达式:〔classform〕button12复制代码类型:〔python〕
代码如下所示:fromseleniumimportwebdriverbroswerwebdriver。Chrome()broswer。get(https:www。jd。com)broswer。findelementbyxpath(〔idkey〕)。sendkeys(python书籍)broswer。findelementbyxpath(〔classform〕button)。click()12345复制代码类型:〔python〕滚动滑动条
实现了自动搜索后,接下来就是要抓取页面中的商品信息,而您会发现只有将滑动条滚动至底部,商品才会全部加载完毕。滚动滑轮操作的代码如下:scrollTo(xpos,ypos)executescript()执行js语句,拉动进度条件scrollHeight属性,表示可滚动内容的高度self。browser。executescript(window。scrollTo(0,document。body。scrollHeight)拉动进度条至底部)123456复制代码类型:〔python〕
之后在通过Xpath表达式匹配所有商品,并将它们放入一个大列表中,通过循环列表取出每个商品,最后提取出想要的信息。lilistself。browser。findelementsbyxpath(〔idJgoodsList〕ulli)forliinlilist:item{}提取商品名item〔name〕li。findelementbyxpath(。p〔classpname〕aem)。text。strip()提取价格item〔price〕li。findelementbyxpath(。p〔classpprice〕)。text。strip()提取评论数量item〔count〕li。findelementbyxpath(。p〔classpcommit〕strong)。text。strip()提取商家店铺item〔shop〕li。findelementbyxpath(。p〔classpshopnum〕)。text。strip()1234567891011复制代码类型:〔python〕实现翻页抓取
如何实现翻页抓取数据,并判断数据数据已经抓取完毕呢?这其实并不难想到,我们可以先跳至终止页(即最后一页)。此时最后一页的下一页处于不可用状态,其元素节点如下:终止页下一页class属性:em下一页emii其他页下一页class属性:em下一页emii12复制代码类型:〔python〕
如果页面源码中有上述代码存在,则证明此页是最后一页,若没有则不是。因此通过if。。。else语句即可实现上述需求,如下所示:1说明没找到,不是最后一页,执行点击下一页操作ifself。browser。pagesource。find(pnnextdisabled)1:browser。findelementbyclassname(pnnext)。click()123复制代码类型:〔python〕完整程序代码
完整程序代码如下所示:coding:utf8fromseleniumimportwebdriverimporttimeimportpymongoclassJdSpider(object):definit(self):self。urlhttp:www。jd。comself。optionswebdriver。ChromeOptions()无头模式self。options。addargument(headless)self。browserwebdriver。Chrome(optionsself。options)创建无界面参数的浏览器对象self。i0计数,一共有多少件商品输入地址输入商品点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮defgethtml(self):self。browser。get(self。url)self。browser。findelementbyxpath(〔idkey〕)。sendkeys(python书籍)self。browser。findelementbyxpath(〔classform〕button)。click()把进度条件拉倒最底部提取商品信息defgetdata(self):执行js语句,拉动进度条件self。browser。executescript(window。scrollTo(0,document。body。scrollHeight))给页面元素加载时预留时间time。sleep(2)用xpath提取每页中所有商品,最终形成一个大列表lilistself。browser。findelementsbyxpath(〔idJgoodsList〕ulli)forliinlilist:构建空字典item{}item〔name〕li。findelementbyxpath(。p〔classpname〕aem)。text。strip()item〔price〕li。findelementbyxpath(。p〔classpprice〕)。text。strip()item〔count〕li。findelementbyxpath(。p〔classpcommit〕strong)。text。strip()item〔shop〕li。findelementbyxpath(。p〔classpshopnum〕)。text。strip()print(item)self。i1defrun(self):搜索出想要抓取商品的页面self。gethtml()循环执行点击下一页操作whileTrue:获取每一页要抓取的数据self。getdata()判断是否是最一页ifself。browser。pagesource。find(pnnextdisabled)1:self。browser。findelementbyclassname(pnnext)。click()预留元素加载时间time。sleep(1)else:print(数量,self。i)breakifnamemain:spiderJdSpider()spider。run()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253复制代码类型:〔python〕
输出结果如下:{name:Python编程从入门到实践第2版(图灵出品)人民邮电出版社,price:52。50,count:200条评价,shop:智囊图书专营店}{name:Python编程从入门到实践第2版(图灵出品),price:62。10,count:20万条评价,shop:人民邮电出版社}{name:Python编程三剑客:Python编程从入门到实践第2版快速上手第2版极客编程(套装共3册),price:206。90,count:5万条评价,shop:人民邮电出版社}{name:Python数据分析从入门到实践(excel高效办公)(3全彩版),price:46。10,count:10万条评价,shop:明日科技京东自营旗舰店}{name:零基础学Python(编程入门项目实践同步视频)(3全彩版),price:37。50,count:10万条评价,shop:明日科技京东自营旗舰店}{name:Python编程快速上手让繁琐工作自动化第2版,price:44。50,count:10万条评价,shop:人民邮电出版社}{name:现货包邮Python学习手册(原书第5版)上下册2本计算机编程设计8053406,price:142。30,count:100条评价,shop:互动创新图书专营店}{name:零基础入门学习Python(第2版),price:70。30,count:1万条评价,shop:清华大学出版社}{name:超简单:用Python让Excel飞起来,price:34。90,count:2万条评价,shop:机械工业出版社自营官方旗舰店}{name:流畅的Python(图灵出品),price:109。80,count:2万条评价,shop:人民邮电出版社}{name:Python编程从入门到实践第二版python编程从入门到实战零基础自学教程计算机基础语言数据分析,price:49。80,count:5000条评价,shop:墨马图书旗舰店}{name:Python深度学习:基于PyTorch,price:73。40,count:5万条评价,shop:机械工业出版社自营官方旗舰店}{name:Python自然语言处理实战:核心技术与算法自然语言处理教程,price:48。30,count:37条评价,shop:芝麻开门图书专营店}{name:EffectivePython:编写高质量Python代码的90个有效方法(原书第2版),price:110。60105。10,count:2万条评价,shop:机械工业出版社自营官方旗舰店}。。。123456789101112131415复制代码类型:〔python〕
Selenium自动化爬虫让你无须关心网站的类型(静态或者动态),只需您按部就班的寻找元素节点,并依此点击,即可实现数据抓取。不过Selenium最大的缺点就是效率低,因此它只适合做小规模的数据采集工作。
开课吧广场人才学习交流平台
春课文教案设计优秀范例教学设想突出细美的特点。初进中学的学生在阅读和写作时常比较粗疏,课文中的细笔细绘可作为范例,给学生以启发。对文中的形象美、语言美、结构美、情味美,学生由于年龄小,不注意体……
鹬蚌相争的教案设计一、第一自然段1、出示(这是一只河蚌)板:河蚌读(它张开壳儿在河滩上晒太阳)演:张壳出示:太阳问:被暖暖的太阳照着,河蚌会有怎样一番感觉呢?……
苏教版第十册习作3教学反思第三篇大作文是学写新闻报道,这本来是学生比较感兴趣的一种练笔体裁,可是教材习作要求却限制必须写体育竞赛或学习竞赛的内容,这让我就不太明白了。如果马上组织竞赛,再来写这篇报道,就……
地砖的周长教学设计范文教学目标:1、结合具体情境,探索并掌握正方形的周长的计算方法。2、能正确计算正方形的周长。能运用正方形的周长的计算方法解决实际生活中的简单问题。3、采用身边的……
教学反思拼音教学认读拼音有助于学生掌握更多的生字,词语,拼音的教学是一年级语文教学中不可或缺的部分。学生在幼儿园中已经学习了拼音,本以为拼音的教学应该是很轻松的一件事,但在实践中却发现事实上不……
出师表重点提要注释精选中道崩殂(帝王死),此诚(果真,实在)危急存亡之秋(时)也。开张圣听(扩大圣明的听闻),以光(发扬光大)先帝遗德,恢弘(扩大,发扬)志士之气,若有作奸犯科(科条法……
课文雨点教案模板第一课时一、看图导入,揭示课题1、请小朋友看书上右上方的图,在一片片乌云的下面是什么?2、板书课题:雨点领读课题。3、继续看图,说说雨点落到什么地方,它……
雾凇教案作为一位不辞辛劳的人民教师,通常需要用到教案来辅助教学,借助教案可以恰当地选择和运用教学方法,调动学生学习的积极性。那么优秀的教案是什么样的呢?下面是小编为大家收集的《雾凇》教……
小班语言活动世界上最好听的声音活动名称:世界上最好听的声音。活动目标:1、能根据图片大胆猜测并讲述图中的小动物认为自己最动听的声音是什么。2、初步理解故事内容,了解每个人都有自己认为最好听……
除法的含义及读写法教学反思范文本课时让学生在建立平均分概念的基础上学习除法,认识除号,了解除法等式的写法和读法,教学时,首先借助学生帮助熊猫京京平均分竹笋的活动,激起学生强烈的求知欲望,之后,介绍除法算式的……
减少的近义词和反义词是什么关于减少的近义词大家知道哪些?今天就由小编为大家带来关于减少的近义词及其相关知识解析,希望能帮助到您,一起来看看吧!减少的近义词缩小:1。由大变小。缩小削减:……
小班艺术活动设计帮小羊穿棉衣设计意图:冬天到了,天气冷了,人们都已经换上了厚厚的棉衣,为了让幼儿知道动物和人是一样的,冬天也需要保暖,因此,让幼儿进行了手工制作《帮小羊穿棉衣》。活动目标:……