爬虫基础入门

为什么要学习爬虫

其实我们身边到处都是爬虫的产物,比如我们经常用的Google,百度,bing等,这些搜索引擎就是根据你的需求在网上爬去相关的网页;比如你想在淘宝上买一个东西,可是又纠结店家是不是要价太高,这是你就可以爬去相关商品的价格,做一个对比即可;就拿咱们人工智能方向来说吧,哪个不是通过庞大的数据产生的,那这些数据怎么来的?当然就是网上爬去的啦。

先了解什么是HTML,CSS,JavaScript

因为网页基本都是由HTML组成。HTML是标签但不能算是编程语言,通过浏览器识别标签来呈现出不同的网页内容;CSS是HTML的花匠,让枯燥的原始网页变得花样多彩;JavaScript可以使HTML具有更加复杂的机制的脚本语言。

从最简单的爬虫讲起

一般python都自带urllib库,毕竟python还是以爬虫出名的吧。上代码解释:

从urllib.request中导入urlopen,然后读取网页.read( )即可,如果有中文,记得decode下。

输出的为一个网页源代码( 内容太多,截取部分 ):

然后就是通过正则表达式re匹配即可,下面是获取这个网页的title(如果对正则表达式不熟的,可以往上翻4个推送就到了):

其中re.DOTALL表示有多行的时候,要写上这个

输出的就是

因为网页里的连接都在'href='后面,所以如果想找到这个网页里的所有链接,代码为:

输出截图( 截取部分 ):

这就是最简单的爬虫。

BeautifulSoup

安装

如果是python2,3都有的话,python3+的就用pip3就行。后面的4或许是版本吧。

简单使用

先把上面得到的html喂给它,然后就想咋地咋地了。HTML里有很多标签,比如h1,这里获得h1的信息贼简单:

输出为( 部分 ):

现在说说里面的参数,features:解析器的意思,怎么选择官网解释如下:

总之就是能用'lxml'就用。

如果想查找所有呢:

输出(部分):

但是我们想要的是'href='后的链接,这里hrefs相当于字典,因为'href'是a标签的以一个属性,可以把'href'当做key来查找:

结果为( 部分 ):

Beautifulsoup: find by CSS class

这里我就用morvan的教程网页了。

HTML一般都会和CSS一起搭配,所以有时候的数据选取会和CSS有关,总之CSS你只要知道它的class即可,根据class爬取数据。

我们先读取它的文本:

大概样子为:

CSS一般可能在<head>...</head>里。很明显CSS归类的这些组件还是很有用的,比如我们就想找class="jan"下面的<li>...</li>里面的内容。而且Beautiful Soup就能这么干。上代码:

也可以先获得<ul>...</ul>,在获得里面的<li>...</li>:

BeautifulSoup解析网页:正则表达

先看看这次的教程的示例网页:

比如你想下载这个页面的图片,我们先通过BeautifulSoup筛选它们,然后通过正则表达提取。

也就是通过查找标签为img,并且属性src符合

的链接。

获取'href'链接也一样:

小练习:爬取百度百科

任务是模仿类似深搜的方法,爬取当然网页任意一个的百度百科词条。

his 是history,存取以往的url,his后面的值就是'网络爬虫'的具体地址。

先打印一下试试:

但是有的sub_urls没有符合要求的网页,这时候就需要向前跳一个,继续爬取。又因为百度百科词条的HTML大致满足这个要求:

则,代码为:

结果为:


原文发布于微信公众号 - 深度学习自然语言处理(zenRRan)

原文发表时间:2018-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯社交用户体验设计

深挖data URI性能瓶颈

2072
来自专栏HTML5学堂

JavaScript | 选中并获取多行文本框内容的效果

HTML5学堂(码匠):文本操作一直是开发中不可避免的存在,用户选中的文本内容,是否可以进行获取并处理到需要的位置当中?如果可以,这样的操作到底需要使用到哪些方...

4256
来自专栏数据的力量

职场人必备的WORD排版十大技巧

2117
来自专栏腾讯IVWEB团队的专栏

React + Redux 组件化方案

在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Header 组件,无需关注...

6620
来自专栏智能算法

微信小程序,开发大起底

作者简介:张智超,北京微函工坊开发工程师,CSDN微信开发知识库特邀编辑。微信小程序爱好者。 感谢@翟东平 @qq_31383345 @nigelyq 等热情参...

50914
来自专栏Google Dart

AngularDart Material Design 日期选择器 顶

当用户键入日期时,将专门处理具有2位数年份的日期。 例如。7/7/77被解释为1977年7月7日,而不是77年7月7日。这个逻辑看起来是未来20年:现在(201...

1673
来自专栏nice_每一天

一天带你入门到放弃vue.js(三)

自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是vue的指令if,f...

1411
来自专栏用户2442861的专栏

我的VS2010+VAssistX

最近越来越觉得VAssistX好用,可能是以前没有去仔细研究过吧,也可能是因为我是个快捷键控吧,不管怎样,用或不用,方便或不方便,它就是那里,一动也不动,进入...

1261
来自专栏dotnet & java

datatables 配套bootstrap3样式使用小结(1)

公司CMS内容资讯站的后台管理界面用了大量的table来管理数据,试用了之后,感觉挺不错,推荐一下。

912
来自专栏前端说吧

vue - 使用vue实现自定义多选与单选的答题功能

3062

扫码关注云+社区