企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

前天小编带大家利用Python网络爬虫采集了天气网的实时信息,今天小编带大家更进一步,将采集到的天气信息直接发送到邮箱,带大家一起嗨~~拓展来说,这个功能放在企业级角度来看,只要我们拥有客户的邮箱,之后建立邮箱数据库,然后我们就可以通过网络爬虫将采集到的信息发送给我们的目标用户,而且每天都可以实现定时发送。

对于天气信息,我们采集的目标网站是搜狐天气网,信息内容如下图所示:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

搜狐天气网

采集的方式仍然使用BeautifulSoup选择器,定义get_weather函数,具体代码如下图所示:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

定义get_weather函数

采集到的信息内容有:当前城市、天气状态、当前气温、最低温、最高温、空气质量和PM2.5值。在代码块中使用了string属性、字符串格式化和lambda函数等知识点。在使用BS4匹配目标信息时,建议大家逐步进行代码测试,养成良好的习惯,这样不至于写完之后因代码报错而一头雾水。

采集到天气信息之后,接下来要写代码实现邮件的自动发送。定义send_email函数,具体代码如下图所示:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

定义send_email函数

确认好对方(或客户群)的邮箱之后,放在列表中,等待被遍历,之后只需要输入本人的邮箱名、登录密码和邮箱服务器,便可以实现信息的自动发送了。本例中,小编以自己的搜狐邮箱为例,目标城市选择小编所在的城市大连,程序运行之后,将得到以下的效果图:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

效果图

尔后登录自己的搜狐邮箱,然后就可以看到一封天气预报的邮件已经在自己的未读邮件中了,打开邮件信息,如下图所示:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

搜狐邮箱收件箱

可以很明显的看到邮件内容和采集到的信息是完全一致的。这样就可以实现邮件的一键收发啦~~~

那么是不是只有搜狐邮箱才可以实现邮件发送呢?当然不是啦,163网易邮箱照样可以,只需要更改邮箱服务器就可以了,效果图如下所示:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

发送信息到网易163邮箱

点开邮件查看邮件内容,如下图:

企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件

网易163邮箱收件箱

同搜狐邮箱一样,接受到的邮件内容和采集到的信息是完全一致滴。

最后安利一下小伙伴们邮箱服务器和PM2.5的标准。

一、部分常用邮箱服务器汇总:

腾讯QQ邮箱发送服务器:smtp.qq.com

网易126邮箱发送服务器:smtp.126.com

网易163邮箱发送服务器:smtp.163.com

新浪免费邮箱发送服务器:smtp.sina.com.cn

搜狐邮箱发送服务器:smtp.sohu.com

雅虎邮箱发送服务器:smtp.mail.yahoo.com

Gmail邮箱发送服务器:smtp.gmail.com

二、PM2.5值的参考值

空气质量等级 24小时PM2.5平均值标准值

优 35微克(ug)/每立方

良 35~75微克(ug)/每立方

轻度污染 75~115微克(ug)/每立方

中度污染 115~150微克(ug)/每立方

重度污染 150~250微克(ug)/每立方

严重污染 250及以上微克(ug)/每立方

从采集结果来看,大连的天气PM2.5的值为110微克,属于轻度污染的范围。

利用网络爬虫技术实现自动发送天气预告邮件,你get到了嘛?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

人生苦短,我用Python。众所周知,Python目前越来越火,学习Python的小伙伴也越来越多。最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了方便大家学习Python,小编整理了一套Python和Pycharm安装详细教程,只要大家按照这个步骤来,就可以轻松的搞定Python和Pycharm的安装了。

Python具有跨平台性,它几乎可以在任何平台下运行,如:Windows/Unix/Linux等操作平台上。大部分的小伙伴用的是Windows,在此小编就以Windows平台为例,详解Python和Pycharm安装过程。

一、Python安装过程

工欲善其事,必先利其器。首先我们先来安装Python,在这里安利一下:其实在没有安装Python之前也可以安装Pycharm的,两者并没有什么冲突关系。但是话说回来,如果没有Python编译器,那么Pycharm其实只是个驱壳,即便你编好程序之后,也并不能运行。举个栗子,Python相当于子弹,Pycharm相当于手枪,如果手枪没有子弹的话,那它就没有走火的可能性。从逻辑上来讲,还是应该先安装Python的,具体流程如下:

1、首先进入Python的官网:https://www.python.org,之后选择下图框框内的文件进行下载:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

当然你也可以直接进入网址:https://www.python.org/downloads/,选择对应的Windows安装包,进行文件下载即可,如下图所示:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

2、下载Python。其中Python2和Python3版本都可以下载,两者是兼容的。在这里,小编以Python3版本的安装为例,下载后如下图所示:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

3、安装Python。双击python-3.6.4.exe文件,之后按照框框内的指示进行选择,记得勾选两个框框,然后选择Customize installation进入到下一步:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

4、之后进入以下的界面,默认即可,直接选择下一步:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

5、之后进入下图界面,点击Browse可以进行自定义安装路径,千万要记得自己把它安装在哪个盘下面,当然你也可以直接点击Install进行默认安装,点击Install后便可以完成安装了。本例中,小编把它安装在C盘,之后点击Install,稍等片刻之后,便可以实现Python的安装了。(注意:要记得Python的安装路径)

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

在安装过程中如果弹出任何提示的话,选择确定或者允许操作就可以了。

6、安装完成之后在开始菜单中输入cmd命令,进入命令行窗口,然后在窗口中输入python进行验证。如果出现下面两张图的提示,就说明Python安装成功了。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

如果你看到提示符>>>,就表示我们已经在Python交互式环境中了,此时你可以输入任何Python代码,回车后会立刻得到执行结果。现在,输入exit()并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以)。

7、如果出现下图的提示,则说明安装失败了:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

出现这个错误的原因是因为你在安装的时候漏掉了勾选Add python.exe to Path这个选项,此时就要手动把刚刚安装所在的路径添加到Path中。如果你不知道怎么修改环境变量,建议把Python安装程序重新运行一遍,记得勾上Add python.exe to Path这个选项就可以顺利安装了。

接下来我们安装开发环境Pycharm,至于为神马选择Pycharm,可以戳这篇文章(企业级开发大佬告诉你学习Python需要用什么开发工具)。

二、Pycharm安装过程

1、首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#section=windows,下载PyCharm安装包,根据自己电脑的操作系统进行选择,对于windows系统选择下图的框框所包含的安装包。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

2、选择Windows系统的专业版,将其下载到本地,如下图所示:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

3、双击下载的安装包,进行安装,然后会弹出界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

4、选择安装目录,Pycharm需要的内存较多,建议将其安装在D盘或者E盘,不建议放在系统盘C盘:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

5、点击Next,进入下图的界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

Create Desktop Shortcut创建桌面快捷方式,一个32位,一个64位,小编的电脑是64位系统,所以选择64位。

勾选Create Associations是否关联文件,选择以后打开.py文件就会用PyCharm打开。

6、点击Next,进入下图:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

默认安装即可,直接点击Install。

7、耐心的等待两分钟左右,如下图:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

8、之后就会得到下面的安装完成的界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

9、点击Finish,Pycharm安装完成。接下来对Pycharm进行配置,双击运行桌面上的Pycharm图标,进入下图界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

选择Do not import settings,之后选择OK,进入下一步。

10、选择Accept,进入下一步:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

11、进入激活界面,选择第二个License server,如下图所示:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

之后在License server address中随意输入下面两个注册码中的任意一个即可,Pycharm新注册码1:http://idea.liyang.io或pycharm新注册码2:http://xidea.online,之后点击OK,便可以激活Pycharm了。

12、Pycharm激活后

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

13、激活之后会自动跳转到下图界面,选择IDE主题与编辑区主题:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

建议选择Darcula主题,该主题更有利于保护眼睛,而且看上去也非常不错~~~

14、选择OK之后进入下图界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

选择Yes即可,更换IDE主题。

15、之后进入下图界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

16、点击Create New Project,进入如下图的界面:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

自定义项目存储路径,IDE默认会关联Python解释器。选择好存储路径后,点击create。

17、IDE提供的提示,直接close即可,不用理会。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

18、进入的界面如下图所示,鼠标右击图中箭头指向的地方,然后选择New,最后选择python file,在弹出的框中填写文件名(任意填写),本例填写:helloworld。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

19、之后得到下图,然后点击OK即可:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

20、文件创建成功后便进入如下的界面,便可以编写自己的程序了。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

这个界面是Pycharm默认的界面,大家完全可以自己去setting中设置自己喜欢的背景和字体大小、格式等等。

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

在这里我就不一一赘述了,起码到这里我相信大家已经实现了Pycharm的安装了。

为了给大家创建一个学习Python的氛围,小编为大家建立了一个Python学习群: 734615061,里面有Python和Pycharm等开发工具的安装包和安装教程,可以免费分享给大家,让我们一起为学习Python而奋斗吧~~

21、Pycharm中的部分快捷键

1、Ctrl + Enter:在下方新建行但不移动光标;

2、Shift + Enter:在下方新建行并移到新行行首;

3、Ctrl + /:注释(取消注释)选择的行;

4、Ctrl+d:对光标所在行的代码进行复制。

虽然本文使用的Pycharm版本比较老,但是同样适用于Pycharm2018,Pycharm2019。很多小伙伴安装之后,都只有试用的机会,让人头大。这里小编给大家安利一个激活方式,如果需要的话,公众号后台回复“激活方式”四个字获取详情。

最后小编祝大家能够顺利的完成Python和Pycharm的安装,^_^祝大家周末愉快^_^

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

相信小伙伴们都知道今冬以来范围最广、持续时间最长、影响最重的一场低温雨雪冰冻天气过程正在进行中。预计,今天安徽、江苏、浙江、湖北、湖南等地有暴雪,局地大暴雪,新增积雪深度4~8厘米,局地可达10~20厘米。此外,贵州中东部、湖南中北部、湖北东南部、江西西北部有冻雨。言归正传,天气无时无刻都在陪伴着我们,今天小编带大家利用Python网络爬虫来实现天气情况的实时采集。

此次的目标网站是绿色呼吸网(http://www.pm25.com)。绿色呼吸网站免费提供中国环境监测总站发布的PM2.5实时数据查询,更收集分析关于PM2.5有关的一切报告和科研结论,力求以绵薄之力寻同呼吸共命运的你关注PM2.5,关注大气健康!

程序实现很简单,本次选择BeautifulSoup选择器用于匹配目标信息,如:地区、时间、AQI指数、首要污染物、PM2.5浓度、温馨提示等。需要采集的页面内容如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

绿色呼吸网天气信息

在网页源码中,目标信息存在的位置如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

部分网页源码

在开发工具pycharm中进行代码实现,难点在于BS4选择器的语法。有个细节需要注意,部分城市在当天是没有污染物的,因此在网页中wuranwu这个属性没有任何显示,此时应该介入if判断语句,避免获取的数据为空导致程序报错,也可以做异常处理来解决这个问题。其中部分关键代码如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

在开发工具pycharm中进行代码实现

只要我们右键点击运行,在控制台中输入我们所关注城市的汉语拼音,便可以在pycharm的控制台中可以看到该地区的实时天气信息,而且还有温馨提示,是不是很方便呢?

最近天寒地冻的,小编建议大家注意出行安全,出行优先乘坐公共交通工具,尽量少开车、不开车。

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

对于动漫爱好者来说,海贼王、火影、死神三大动漫神作你肯定肯定不陌生了。小编身边很多的同事仍然深爱着这些经典神作,可见“中毒”至深。今天小编利用Python大法带大家分析一下这些神作,看看这些神作到底在讲些神马。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

人生苦短,我用Python。小编利用Python网络爬虫爬取了豆瓣网,将网站上关于这三部动漫的评论全部抓取下来,之后通过Python的第三方库jieba分词进行词频统计和分析,最后通过matplotlib库和wordcloud库将关键词制作成词云进行可视化展示。

词云是神魔?”词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于近日提出。”词云”就是对网络文本中出现频率较高的”关键词”予以视觉上的突出,形成”关键词云层”或”关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

话不多说,直接上图,下图是《海贼王》的豆瓣评论词云可视化展示图。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《海贼王》豆瓣评论词云

对于《海贼王》来说,世界,梦想,搞笑,感动,冒险,自由等关键词是大家对这部热血动漫的评价。在人物展现了,路飞、索隆和艾斯榜上有名。路飞这个贯穿这个海贼王的名字毫无疑问出现的次数最多,接下来是大剑豪索隆和死去的艾斯。

路飞是草帽海贼团船长,由于他的标志性特征是一顶草帽,因此常被直接称呼为草帽小子或草帽路飞,他的梦想是找到传说中的One Piece,成为海贼王。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《海贼王》人物—路飞

索隆是草帽海贼团第一位伙伴,职位是剑士,团内三主力之一,11位超新星的其中一人,悬赏金额在香波第诸岛排行第10名,特征是绿色头发(短发)、黑色的头巾(大多缠在左手臂上)、绿色的腰带(肚兜)和左耳配戴了三个耳环。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《海贼王》人物—索隆

艾斯是日本动漫《海贼王》里的虚构人物,统称为“火拳”,是主角蒙奇·D·路飞的义兄,已逝。他的形象是黑发,常戴着一顶橘色的帽子,在帽子上有奸笑和难过这两种表情图案,而且帽子的绳子绑着一个骷髅头的牌子,是白胡子海贼团第二队队长,实力不凡。曾被一度邀请加入七武海。后被黑胡子击败,并且交与海军,关押在海底大监狱。后因为保护路飞用身体去挡海军大将赤犬的岩浆拳,结果被贯穿了身体。内脏也被烧伤,船医通过检查发现其内脏已被烧坏无法医治,因伤势过重死亡。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《海贼王》人物—艾斯

下图是《火影忍者》的豆瓣评论词云可视化展示图。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《火影忍者》豆瓣评论词云

毋庸置疑,喜欢《火影忍者》的人不枚胜举,大家对这部动漫的喜爱度和评价也较高。从词云可视化来看,原创、剧情、拖沓、越来越、太长等相对负面的词有蛮多的。究其原因,那就是剧情拖沓,到后面有让人看不下去的感觉,甚至给人一种烂尾的感觉。但是总体上来说,小伙伴们对该剧的评价还是偏向于喜欢的~~~

在人物方面,主人公鸣人和他的好基友佐助很明显的出现在词云中。鸣人是日本动漫《火影忍者》的主角。火之国木叶隐村的忍者,四代目火影波风水门和二代九尾人柱力漩涡玖辛奈之子,六道仙人次子阿修罗转世。最后他成功控制了体内的九尾查克拉,并在第四次忍界大战中与佐助携手抗敌,成为了拯救世界的英雄。最后,鸣人终于实现自己的梦想,成为了火影。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《火影忍者》人物—鸣人

佐助是日本动漫《火影忍者》中的第二男主角。火之国木叶隐村宇智波一族的天才忍者,六道仙人长子因陀罗的转世。后来战争结束后,佐助因使世界和平的道路和鸣人不同,而在终结之谷与鸣人进行了宿命的一战,两败俱伤 。佐助最终被鸣人所感动,认同了鸣人使世界和平的道路,并重新成为木叶的一员。之后为了更加看清现在的世界开始了独自一人的赎罪之旅。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《火影忍者》人物—佐助

下图是《死神》的豆瓣评论词云可视化展示图。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《死神》豆瓣评论词云

《死神》,看到这个名字都觉得毛骨悚然,好怕怕的赶脚。死神是日本心理悬疑推理漫画《Death Note》(《死亡笔记》)中的角色。死神拥有死亡笔记,名字被写在这本笔记上的人就会死。从词云可视化上来看,剧情、动画、漫画、热血、原创、完结、蓝染、尸魂界等元素强调的比较多。

在人物方面,蓝染鹤立鸡群。蓝染是死神当中幕后最大的BOSS,拥有很强的力量,想成为改变整个世界的至高无上的神,不相信任何人,除了银。因为他认为银跟他一样,只有银才了解他。他想拥有力量,更强的力量。他和市丸银既是知己,又是唯一了解彼此的人,市丸银跟随他也是有目的的。只不过起初蓝染不知道罢了 不过,蓝染的死跟市丸银是没有关系的,但也不能说是绝对没有关系的,因为只有银比任何人都了解蓝染的,蓝染目前在TV版动画中还没有死亡。在漫画连载中仅仅只是被封印了,也没有死亡。

Python大佬用词云可视化带你分析海贼王、火影和死神三大经典动漫

《死神》人物—蓝染

通过上面的词云可视化展示,小编相信你肯定知道了《海贼王》、《火影忍者》和《死神》三步巨作想表达的主旨了。不难发现,这三部动漫巨著都是热血动漫,从评论中关于热血的认同度占有很大的比重。果不其然,在我们观看这三部神剧的时候,也确实感受到了热血,里面的人物一言不合就干架,正所谓不热血,不少年~~~

以上的分析仅代表小编个人的看法,欢迎小伙伴们拍砖~~~

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

前几天小编连续写了四篇关于Python选择器的文章,分别用正则表达式BeautifulSoupXpathCSS选择器分别抓取京东网的商品信息。今天小编来给大家总结一下这四个选择器,让大家更加深刻的理解和熟悉Python选择器。

一、正则表达式

正则表达式为我们提供了抓取数据的快捷方式。虽然该正则表达式更容易适应未来变化,但又存在难以构造、可读性差的问题。当在爬京东网的时候,正则表达式如下图所示:

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

利用正则表达式实现对目标信息的精准采集

此外 ,我们都知道,网页时常会产生变更,导致网页中会发生一些微小的布局变化时,此时也会使得之前写好的正则表达式无法满足需求,而且还不太好调试。当需要匹配的内容有很多的时候,使用正则表达式提取目标信息会导致程序运行的速度减慢,需要消耗更多内存。

二、BeautifulSoup

BeautifulSoup是一个非常流行的 Pyhon 模块。该模块可以解析网页,并提供定位内容的便捷接口。通过’pip install beautifulsoup4’就可以实现该模块的安装了。

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

利用美丽的汤去提取目标信息

使用 BeautifulSoup的第一步是将己下载的 HTML 内容解析为 soup文档。由 于大多 数网 页都不具备良好的HTML 格式,因此BeautifulSoup需要对实际格式进行确定。BeautifulSoup能够正确解析缺失的引号并闭合标签,此外还会添加<html >和<body>标签使其成为完整的HTML文档。通常使用find() 和find_all()方法来定位我们需要的元素。如果你想了解BeautifulSoup全部方法和参数,可以查阅BeautifulSoup的官方文档。虽然BeautifulSoup在代码的理解上比正则表达式要复杂一些,但是其更加容易构造和理解。

三、Lxml

Lxml模块使用 C语言编写,其解析速度比 BeautiflSoup更快,而且其安装过程也更为复杂,在此小编就不赘述啦。XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

Xpath

使用 lxml 模块的第一步和BeautifulSoup一样,也是将有可能不合法的HTML 解析为 统一格式。 虽然Lxml可以正确解析属性两侧缺失的引号,并闭合标签,不过该模块没有额外添加<html >和<body>标签 。

在线复制Xpath表达式可以很方便的复制Xpath表达式。但是通过该方法得到的Xpath表达式放在程序中一般不能用,而且长的没法看。所以Xpath表达式一般还是要自己亲自上手。

四、CSS

CSS选择器表示选择元素所使用 的模式。BeautifulSoup整合了CSS选择器的语法和自身方便使用API。在网络爬虫的开发过程中,对于熟悉CSS选择器语法的人,使用CSS选择器是个非常方便的方法。

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

CSS选择器

下面是一些常用的选择器示例。

  • 选择所 有标签: *
  • 选择<a>标 签: a
  • 选择所有class=”link” 的元素: .l in k
  • 选择 class=”link” 的<a>标签: a.link
  • 选择 id= ” home ” 的<a>标签: a Jhome
  • 选择父元素为<a>标签的所有< span>子标签: a > span
  • 选择<a>标签内部的所有<span>标签: a span
  • 选择title属性为” Home ” 的所有<a>标签: a [title=Home]

五、性能对比

lxml 和正则表达式模块都是C语言编写的,而BeautifulSoup则是纯Python 编写的。下表总结了每种抓取方法的优缺点。

选择器 性能 使用难度 安装难度
正则表达式 困难 简单(内置模块)
BeautifulSoup 简单 简单(纯Python)
lxml 简单 相对困难

需要注意的是。lxml在内部实现中,实际上是将CSS选择器转换为等价的Xpath选择器。

六、总结

如果你的爬虫瓶颈是下载网页,而不是抽取数据的话,那么使用较慢的方法(如BeautifulSoup) 也不成问题。如果只需抓取少量数据,并且想要避免额外依赖的话,那么正则表达式可能更加适合。不过,通常情况下,l xml是抓取数据的最好选择,这是因为该方法既快速又健壮,而正则表达式和BeautifulSoup只在某些特定场景下有用。

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

如何利用CSS选择器抓取京东网商品信息

前几天小编分别利用Python正则表达式BeautifulSoupXpath分别爬取了京东网商品信息,今天小编利用CSS选择器来为大家展示一下如何实现京东商品信息的精准匹配~~

如何利用CSS选择器抓取京东网商品信息

CSS选择器

目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup使用的技术书籍和博客软文并不多,而在这仅有的资料中介绍CSS选择器的少之又少。在网络爬虫的页面解析中,CCS选择器实际上是一把效率甚高的利器。虽然资料不多,但官方文档却十分详细,然而美中不足的是需要一定的基础才能看懂,而且没有小而精的演示实例。

如何利用CSS选择器抓取京东网商品信息

京东商品图

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用CSS选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

如何利用CSS选择器抓取京东网商品信息

部分网页源码

仔细观察源码,可以发现我们所需的目标信息在红色框框的下面,那么接下来我们就要一层一层的去获取想要的信息。

在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

如何利用CSS选择器抓取京东网商品信息

CSS选择器在线复制

很多小伙伴都觉得CSS表达式很难写,其实掌握了基本的用法也就不难了。在线复制CSS表达式如上图所示,可以很方便的复制CSS表达式。但是通过该方法得到的CSS表达式放在程序中一般不能用,而且长的没法看。所以CSS表达式一般还是要自己亲自上手。

直接上代码,利用CSS去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

如何利用CSS选择器抓取京东网商品信息

代码实现

如果你想快速的实现功能更强大的网络爬虫,那么BeautifulSoupCSS选择器将是你必备的利器之一。BeautifulSoup整合了CSS选择器的语法和自身方便使用API。在网络爬虫的开发过程中,对于熟悉CSS选择器语法的人,使用CSS选择器是个非常方便的方法。

最后得到的效果图如下所示:

如何利用CSS选择器抓取京东网商品信息

最终效果图

新鲜的狗粮再一次出炉咯~~~

如何利用CSS选择器抓取京东网商品信息

CSS选择器

关于CSS选择器的简单介绍:

BeautifulSoup支持大部分的CSS选择器。其语法为:向tag对象或BeautifulSoup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回,即返回类型为list。

tag.select(“string”)

BeautifulSoup.select(“string”)

注意:在取得含有特定CSS属性的元素时,标签名不加任何修饰,如class类名前加点,id名前加 #。

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

手把手教你如何利用Xpath抓取京东网商品信息

如何利用Xpath选择器抓取京东网商品信息

前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~

HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树;XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

如何利用Xpath选择器抓取京东网商品信息

京东网狗粮商品

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用bs4选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

如何利用Xpath选择器抓取京东网商品信息

狗粮信息在京东官网上的网页源码

仔细观察源码,可以发现我们所需的目标信息是存在<li data-sku=”*****” class=”gl-item”>标签下的,那么接下来我们就像剥洋葱一样,一层一层的去获取我们想要的信息。

通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

如何利用Xpath选择器抓取京东网商品信息

在线复制Xpath表达式

很多小伙伴都觉得Xpath表达式很难写,其实掌握了基本的用法也就不难了。在线复制Xpath表达式如上图所示,可以很方便的复制Xpath表达式。但是通过该方法得到的Xpath表达式放在程序中一般不能用,而且长的没法看。所以Xpath表达式一般还是要自己亲自上手。

直接上代码,利用Xpath去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

如何利用Xpath选择器抓取京东网商品信息

爬虫代码

在这里,小编告诉大家一个Xpath表达式匹配技巧。之前看过好几篇文章,大佬们都推荐Xpath表达式使用嵌套匹配的方式。在本例中,首先定义items,如下所示:

items = selector.xpath('//li[@class="gl-item"]')

之后通过range函数,逐个从网页中进行匹配目标信息,而不是直接通过复制Xpath表达式的方式一步到位。希望小伙伴们以后都可以少入这个坑~~

最后得到的效果图如下所示:

如何利用Xpath选择器抓取京东网商品信息

最终效果图

新鲜的狗粮再一次出炉咯~~~

小伙伴们,有没有发现利用Xpath来获取目标信息比正则表达式要简单一些呢?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

如何利用BeautifulSoup选择器抓取京东网商品信息

昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了。不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演示一下如何实现京东商品信息的精准匹配~~

HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树;因此可以说Beautiful Soup库是解析、遍历、维护“标签树”的功能库。

如何利用BeautifulSoup抓取京东网商品信息

京东官网狗粮商品详情页

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用bs4选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

如何利用BeautifulSoup抓取京东网商品信息

狗粮信息在京东官网上的网页源码

仔细观察源码,可以发现我们所需的目标信息是存在<li data-sku=”*****” class=”gl-item”>标签下的,那么接下来我们就像剥洋葱一样,一层一层的去获取我们想要的信息。

直接上代码,如下图所示:

如何利用BeautifulSoup抓取京东网商品信息

请求网页,获取源码

通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

之后利用美丽的汤去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

如何利用BeautifulSoup抓取京东网商品信息

利用美丽的汤去提取目标信息

在本例中,有个地方需要注意,部分图片的链接是空值,所以在提取的时候需要考虑到这个问题。其解决方法有两个,其一是如果使用img[‘src’]会有报错产生,因为匹配不到对应值;但是使用get[‘src’]就不会报错,如果没有匹配到,它会自动返回None。此外也可以利用try+except进行异常处理,如果匹配不到就pass,小伙伴们可以自行测试一下,这个代码测速过程在上图中也有提及哈。使用get方法获取信息,是bs4中的一个小技巧,希望小伙伴们都可以学以致用噢~~~

最后得到的效果图如下所示:

如何利用BeautifulSoup抓取京东网商品信息

最终效果图

新鲜的狗粮出炉咯~~~

小伙伴们,有没有发现利用BeautifulSoup来获取目标信息比正则表达式要简单一些呢?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python大神利用正则表达式教你搞定京东商品信息

京东(JD.com)是中国最大的自营式电商企业,2015年第一季度在中国自营式B2C电商市场的占有率为56.3%。如此庞大的一个电商网站,上面的商品信息是海量的,小编今天就带小伙伴利用正则表达式,并且基于输入的关键词来实现主题爬虫。

首先进去京东网,输入自己想要查询的商品,小编在这里以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其实参数%E7%8B%97%E7%B2%AE解码之后就是“狗粮”的意思。那么非常明显,只要输入keyword这个参数之后,将其进行编码,就可以获取到我们的目标网址了,请求网页,得到响应,尔后利用选择器便可以进行下一步的精准采集了。

在京东网上,狗粮信息在京东官网上的网页源码如下图所示:

Python大神利用正则表达式教你搞定京东商品信息

狗粮信息在京东官网上的网页源码

话不多说,直接撸代码,如下图所示。小编用的是py3,也建议大家以后多用py3版本。通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是一种可以用于模式匹配和替换的强有力的工具。找到目标网页之后,调用urllib中的urlopen函数打开网页并获取源码,之后利用正则表达式实现对目标信息的精准采集。

Python大神利用正则表达式教你搞定京东商品信息

利用正则表达式实现对目标信息的精准采集

正则表达式写在这个程序中确实蛮复杂的,也占据了多行,但是主要用到的正则表达式是[\w\W]+?和[\s\S]+?。

[\s\S]或者[\w\W]是完全通配的意思,\s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反。这样一正一反下来,就表示所有的字符,完全的,一字不漏的。另外,[]这个符号,表示在它里面包含的单个字符不限顺序的出现,比如下面的正则:[ace]*,这表示,只要出现a/c/e这三个任意的字母,都会被匹配。

此外,[\s]表示,只要出现空白就匹配;[\S]表示,非空白就匹配。那么它们的组合,表示所有的都匹配,与它相对应的,有[\w\W]等,意义完全相同。其实,[\s\S] 和 [\w\W]这样的用法,比”.”所匹配的还要多,因为”.”是不会匹配换行的,所有出现有换行匹配的时候,人们就习惯 使用[\s\S]或者[\w\W]这样的完全通配模式。

最后得到的输出效果图如下所示:

Python大神利用正则表达式教你搞定京东商品信息

输出效果图

这样小伙伴们就可以获取到狗粮的商品信息了,当然,小编在这里只是抛砖引玉,只匹配了四个信息,而且只是做了个单页的获取。需要更多数据的小伙伴们可以自行去更改正则表达式和设置多页,达到你想要的效果。下篇文章小编将利用美丽的汤BeautifulSoup来进行匹配目标数据,实现目标信息的精准获取。

最后给大家简单介绍一下正则表达式。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

正则表达式对于初学者确实晦涩难懂,不过慢慢学习还是可以掌握的,并不一定要完全记下来,但是你要知道什么时候需要什么参数,能做到顺利使用它就可以了。

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

一篇文章助你理解Python3中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解Python2中字符串编码问题。下面在Python3环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解。

一篇文章助你理解Python3中字符串编码问题

在Python2的Python文件的文件头往往会声明字符的编码格式,通过会使用代码“#-*- coding -*-”作为编码声明,如下图所示。

一篇文章助你理解Python3中字符串编码问题

因为考虑到Python文件中可能会穿插中文,不然的话Python通过解释器来读取文件的时候,文件中的中文就有可能识别不了。而在Python3中,我们就不必像Python2的文件那样进行声明编码格式了,因为在Python3中,默认将所有的字符都视为unicode格式了。下面在Python3环境下进行代码演示。

1、首先在Windows操作系统下的Python3环境中进行演示,如下图所示。

一篇文章助你理解Python3中字符串编码问题

可以看到str1就是一个中文的字符串,字符串前面也没有加u以表示其为unicode编码,其实也没有必要加那个字符,因为在Python3中将所有的字符都内置成unicode字符了,这就是Python2和Python3最大的区别。所有在这里可以直接调用encode()函数对字符串进行编码,而且也不会报错。

2、接下来在Linux操作系统下的Python3环境中进行演示,如下图所示。

一篇文章助你理解Python3中字符串编码问题

这个过程和Windows下是一样的,这里就不再赘述了。有个地方需要注意的是在Linux操作系统下,Python3的默认环境编码变为了utf-8编码,而不是Python2中的ASCII编码。

总的来说,Python3解决了一个字符串编码的重要问题,所以在字符串编码的报错方面相对Python2来说要少的多,帮助我们省下了很多事情。小伙伴们,关于在Python2和Python3中字符串的编码问题这个知识点十分重要,希望大家都可以get到噢~~

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】