听说用python写的 爬虫很强

日思夜想的网协线上小课堂终于开课了

当然,先分享一下我们唯一的直播地址:b站直播间8157428

第一堂课我们高(骚)大(气)帅(十)气(足)的会长大大给我们带来了什么干货呢??

看一看,瞧一瞧

这节课我们讲了用python编写网络爬虫相关的知识。主要包括以下几个小节:

1

什么是网络爬虫?网络爬虫能做些什么?

网络爬虫(webspider)是个很形象的比喻,我们把网络比喻成一张大网,网络爬虫按照某种规则在这张大网上来回爬行,并获取它想要的信息。爬虫程序从一个URL爬取起,再跳转到该页面关联的URL上,这样就能够快速获得站点内许多页面的特定信息。简单地说,网络爬虫就是自动访问网页,并获取其中有价值的信息的程序。

至于爬虫的应用嘛,使用大规模的分布式爬虫可以在短时间内获得千万甚至亿级数据量,作为数据分析的基础。有了数据就能干很多事情,具体的就不再一一举例,各位自行想象或者百度吧。

2

正则表达式

正则表达式是一种以某种格式匹配字符串的表达式。

我们就直接以代码来举例吧,假设我们现在需要找出一个网页中所有的中国手机号码,这里就取首位为1一共11位的规则来进行匹配。 这是不用正则的代码,简单易懂。

以下是使用正则表达式的代码:

我们先讲讲这个匹配是怎么完成的,再回来看这个代码。

首先要使用正则表达式这一工具,我们需要导入re这个模块,也就是上面代码中的import re

创建模式匹配与匹配符合正则表达式的字符串

然后对比着看一下上面的代码,是不是大概能看懂啥意思了。

然后就是正则表达式的格式了,初步可以参照以下的表来编写正则表达式:

正则表达式的匹配是贪婪的,因为它默认尽量去匹配最长的字符串,这就会出现这样的情况: 我们要从awertyuic123456cbbb中匹配a到第一个c之间的内容,假设我们用a.*c匹配的话,就会匹配到a与第二个c之间的内容,正则表达式找到了最长的匹配该模式的字符串,这时候我们就需要把匹配模式设定成非贪婪,用?符号处理.*部分,使这段不需要匹配到最长,也就是a.*?c就会在第一个c处结束匹配了。

好了,本期涉及的正则表达式内容就这么多,关于re库的详细用法请自行百度吧。

3

html/css是什么

简单来说html/css是网页的框架html标签层层嵌套,构成了整个页面的骨架,而css(层叠样式表)则是修饰页面的关键,通过赋予标签id和class来修饰标签内的内容,怎么修饰的就不讲了,关键在于,我们可以用标签的idclass来迅速选择我们要找的标签。关于html/css/js的web开发方向的学习,此处强力推荐freecodecamp中文站w3school在线教程

4

URL分析

URL(统一资源定位符)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示。比如说,天气预报网网址http://www.tianqi.com/taiyuan 就是一个URL,第一段http://表示服务器传输使用http协议,www.tianqi.com是这个网站的域名,/taiyuan则是具体定位到了这个存储这个网站页面的文件夹中的taiyuan.html文件,你可以把taiyuan换成你所在的城市的拼音试试,就会跳转到你所在的城市的天气了。

点击网页上的一些其他链接,会跳转到对应的页面,这是因为在这个链接所在的标签里有一个href属性,指向跳转页面的URL

你可以在地址栏里敲www.tianqi.com/news/list_404_1.html试试,就能跳到对应的网页了,为什么href属性里没有网站域名这一段?因为源码里面这是相对URL,我们用客户端访问服务器资源是需要绝对URL的,所以要手动加上域名那一段

互联网中任何一个资源都是有其对应URL的,包括页面、视频、图片等等,对应着资源在服务器中的位置。

5

爬取环节

需要用到下面两个第三方库

1. 网页下载(requests)

作用:负责从因特网上下载文件和网页,python本身也自带urllib模块可以完成这项工作,但是用起来复杂些,此处先用requests库来完成这项工作

运用举例:在xkcd极客漫画网站下载其中的一幅漫画

进入主页,按下f12,找到第一页漫画对应的URL

有了漫画的URL ,下载它

结合注释,简单易懂。只要能找到资源对应的URL,都可以用这种方式进行下载。其中res.iter_content(100000)中的100000表示这段传输过来的数据包含多少字节,此处设定为100000,http资源的传输是按段进行的,如果你传入一个很小的字节数,就会获得一张不完整的图片。

2. 网页解析(beautifulsoup)

作用:负责解析HTML,将html页面内容转换为BeautifulSoup类,以迅速定位页面内容。需要用import bs4来引入这个模块

运用举例:用Beautifulsoup库的select()函数来进行元素定位

select函数的选择方法,和CSS选择器的语法非常相似,如果有这方面基础的同学可以很快理解,也可以参照下表

知道怎么选择元素之后呢,首先我们需要从HTML创建一个BeautifulSoup对象

把res的text属性,也就是文本内容给bs4.BeautifulSoup()并用’html.parser’解释器来解释这段文本。此时可以用type()函数检测weatherSoup的数据类型,是一个BeautifulSoup对象。

接下来继续用select()函数寻找当前天气的位置。

select返回的是一个列表,所以此时要用weather[0]来取出当前的天气,至此,我们就可以完整的使用上面提到的知识去编写一个查询天气的小脚本了!

完成代码如下

我们仅仅讲了4个相关的函数来进行网页内容的下载解析,事实上,requests和BeautifulSoup这两个库还有更强大的功能可以让我们编写爬虫程序时使用。

在最后会长还给我们实际演示了用爬虫来自动下载漫画。在这里就不详细写出来啦!

这次我们的线上小课堂开展的时十分成功的,最高时有500人同时在线观看,想想就让人激动呢。错过讲课的小伙伴们也可以去B站观看录放教程

下次我们的网协小课堂将要教授关于小程序开发的知识,被跳一跳虐了千百遍的你,还不快来学习一下。

附会长苦口婆心的叮嘱一份

2. 网协将在这个假期不定时的在此直播间开设直播,去讲解互联网技术相关的内容,下周三将由小贱贱同学来为大家讲解有关微信小程序相关的知识

3. 爬虫虽然好用,但是一定要注意在爬取信息时的相关法规,比如不可将爬虫得到的资源进行商用,不能对一个服务器进行过快的采集,一方面服务器会对行为过于像机器人的ip进行封ip处理,另一方面性能很高的爬虫也会对服务器造成一定的负担。

4. 爬虫的技术栈是相当丰富的,你可以用scrapy进行分布式爬虫的快速开发,可以用seleium完成自动化爬取,可以用一些js的解析库爬取动态数据,可以用xpath语法代替beautifulsoup和正则进行网页内容的快速定位。网络爬虫的学习是需要以网页构建和http的知识为基础的,在此推荐我们的web开发兴趣小组:429583699和我们的公众号天财网协正在更新我们原创的http基础教程,今后也会有更多技术干货和大家分享。

5. 祝各位假期学习愉快。

文案:卢涛

排版:彭帅

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126G10QJB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励