目前网上有关网页爬虫的指导有很多,但是套路却是千篇一律,基本都是围绕以下内容进行展开,CSS/html等网页知识

requests或urllib

BeautifulSoup或正则表达式

Selenium或者Scrapy

对于我来说,学习爬虫知识一项获取数据的工具,而不是工作的主要内容,因此,没有太多的时间花费在上述知识成体系的学习上面。上述提到的每块都涉及大量的知识,一段时间的学习之后容易让人陷入"云里雾里",然后就丧失了学习的兴趣,没有全局观、没有重点,最终使得学习效率非常低下。

本文不详细的讲解什么是CSS/html,怎么用requests或者urllib,本文主要目的是介绍怎么去爬取一个网站、爬取我们需要的资源,可能会用到上述一个或几个模块里的知识,对我们用到的功能了解即可,没有必要从头至尾的学习一遍,希望能够用这种方法让对爬虫感兴趣的同学对这项技术有一个全局的认识,能够满足日常获取数据的需求,如果想要在这项技术上深入研究,可以后续学习其他成体系的课程,对上述模块认真、详细的学习。

准备工作

很多网页爬虫的教程中使用或者提及到很多工具,本文选择以下几项工具,网页浏览器(Google Chrome)

BeautifulSoup4

requests

网页浏览器主要用于查看网页html源码和检查网页单元使用,浏览器有很多,谷歌、火狐、IE等,每个人的喜好不同,可以根据自己的日常习惯进行选择,本文以Google Chrome为例进行讲解。

BeautifulSoup4是一个HTML、XML的解析器,它能够轻而易举的解析web网页,从中获取我们想要的单元和信息,能够避免筛选信息时的麻烦,它能够提供用于迭代、搜索、修改解析树的用法。在网页匹配过程中BeautifulSoup的速度并不比正则表达式快,甚至还要慢一些,但是它最大的优势就是简单、便捷,因此是很多网页爬虫工程中的必选工具之一。

安装

$ pip install beautifulsoup4

/>

requests是Python大神Kenneth Reitz的力作,是一个用于网络请求的第三方库,Python已经内容了urllib模块用于访问网络资源,但是使用起来相对麻烦,而requests相比之下要方便快捷很多,因此本文选择用requests进行网络请求。

安装

$ pip install requests

爬虫示例

很多教程选择爬取糗事百科、网页图片,本文就选取另外一个方向,爬取我们常用的百度百科,这样更加直观、易于理解。

示例主要从两个方面入手,爬取百科词条内部链接

下载词条内部包含图片

/>

经常浏览网页,注意细节或者善于总结的会发现,网址主要有两部分组成,基础部分,和对应词条的后缀,例如上述百科词条,由基础部分/item/林志玲/172898?fr=aladdin,因此我们要爬取一个网站首先要获取一个网址。

第一步,要确定一个目标,你要爬取什么数据?

很多人会认为,这不是废话吗?我个人认为这是很重要的,有目的才会效率更好,在没有某种目标驱动的情况下,就很难带着问题和压力去做一件事情,这样会变得漫无目的,导致效率很低,因此,我认为最重要的是首先要清楚想爬取什么数据?网页上的音乐

图片

素材

本文就以爬取百度百科词条内部链接和下载图片为目标进行讲解。

第二步,我们要获取一个基础的网址,百度百科的基础网址,

https://baike.baidu.com/

第三步,打开首页,以林志玲的百度词条为首页开始爬取。

第四步,查看源码,

很多人都知道查看源码的快捷键是F12,不管是谷歌浏览器还是IE浏览器,都是这样,但是当按下F12之后会不由得疑问,"这是什么东西?",令人毫无头绪。

/>

当然,可以一步一步的去了解源码,学习html的知识,然后用正则表达式去一步一步、一个单元一个单元的匹配我们想要的信息,但是这样未免太复杂了,我个人推荐使用检查工具。

/>

爬取内部链接

指向我们想要了解的元素,

/>

素,鼠标右键->检查,能够快速定位我们关注的元素。

我觉得到这一步就已经够了,最简单的网页爬虫就是反复的重复以下两个步骤:检查定位我们想要的元素和属性

BeautifulSoup4匹配我们要的信息

通过检查功能可以看到,百科词条内部链接部分的源码是这样的,

元素1:

凯渥模特经纪公司

元素2:

决战刹马镇

元素3:

月之恋人

元素4:

AKIRA

从上述4个元素可以看出,我们想要的信息词条内部链接在标签中,标签中有以下几个属性:target:这个属性贵姓在何处打开链接文档,_blank标明浏览器总在一个新标签页载入目标文档,也就是链接href指向的文档。

href:前面已经提过很多次,属性href用于指定超链接目标的链接,如果用户选中了标签中的内容,则会尝试打开并显示href指定链接的文档。

data-*:这是html的新特性可以存储用户自定义的属性。

可以看出,我们想要的信息就在href中,也就是词条的内部链接。因此,我们爬虫的目标就很明确了,就是解析出href超链接。

到这里,浏览器检查功能已经发挥了它的作用,下一步问题就变成了我们怎么解析出标签中href的链接?

这时,BeautifulSoup4就派上用场了。

用BeautifulSoup4解析我们从网页上抓取的html,

soup = BeautifulSoup(response.text, 'html.parser')

看到这里也许会疑惑,html.parser是什么?

这是一种html的解析器,Python中提供几种html解析器,它们的主要特点分别是,

/>

综合来说,我们选取html.parser解析器,

选取好解析器之后就开始着手匹配我们想要的元素,可是看一下html发现,网页中有很多标签,我们该匹配哪一类呢?

AKIRA

仔细看一下会发现特点,target="_blank",属性href以/item开头的,于是就有了我们的匹配条件,

{"target": "_blank", "href": re.compile("/item/(%.{2})+$")}

用这样的匹配条件去匹配符合target、href要求的标签,

sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("/item/(%.{2})+$")})

完整代码为,

def main():

url = BASE_URL + START_PAGE

response = sessions.post(url)

response.encoding = response.apparent_encoding

soup = BeautifulSoup(response.text, 'html.parser')

sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("/item/(%.{2})+$")})

for sub_url in sub_urls:

print(sub_url)

输出结果为,

幸福额度

北京·纽约

多伦多大学

刺陵

决战刹马镇

北京·纽约

张国荣

奥黛丽·赫本

林健寰

斯特罗恩中学

多伦多大学

华冈艺校

唐安麒

日本再发现

亚太影展

梁朝伟

金城武

......

在用属性字段sub_url["href"]过滤一下即可,

/item/%E5%B9%B8%E7%A6%8F%E9%A2%9D%E5%BA%A6

/item/%E5%8C%97%E4%BA%AC%C2%B7%E7%BA%BD%E7%BA%A6

/item/%E5%A4%9A%E4%BC%A6%E5%A4%9A%E5%A4%A7%E5%AD%A6

/item/%E5%88%BA%E9%99%B5

/item/%E5%86%B3%E6%88%98%E5%88%B9%E9%A9%AC%E9%95%87

/item/%E5%8C%97%E4%BA%AC%C2%B7%E7%BA%BD%E7%BA%A6

/item/%E5%BC%A0%E5%9B%BD%E8%8D%A3

......

就得到了词条内部链接的后缀部分,然后和基础的url拼接在一起就是完整的内部链接地址。

同理,用同样的方法也可以爬取其他内容,比如糗事百科的笑话、专业网站的素材、百度百科的词条,当然,有些文本信息比较杂乱,这个过程中需要一些信息的筛选过程,例如利用正则表达式来匹配一段文本中有价值的信息,方法与上述大同小异。

下载图片

/>

和爬取内部链接一样,要善于利用浏览器的检查功能,检查一下词条内部图片的链接,

发现,图片链接存放在标签内部,用上述方法可以匹配到图片的完整链接,

response = sessions.post(url)

response.encoding = response.apparent_encoding

soup = BeautifulSoup(response.text, "html.parser")

image_urls = soup.find_all("img", {"class": "picture"})

for image_url in image_urls:

print(image_url["src"])

输出如下,

https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=36dbb0f7e1f81a4c2232ebcbe7286029/a2cc7cd98d1001e903e9168cb20e7bec55e7975f.jpg

https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=85844ee8de0735fa95f049bbae500f9f/dbb44aed2e738bd49d805ec2ab8b87d6267ff9a4.jpg

...

然后用requests发送请求,获取图片的数据,然后以读写文件的方式存储到本地,

for image_url in image_urls:

url = image_url["src"]

response = requests.get(url, headers=headers)

with open(url[-10:], 'wb') as f:

f.write(response.content)除了requests之外,还可以使用urllib.request.urlretrieve下载图片,urlretrieve相对要方便一些,但是对于大文件,requests可以分段读写,更具有优势。

上述介绍的方法是比较简单的一种,如果精力有限也可以尝试一下Selenium或者Scrapy,这两款工具的确非常强大,尤其是Selenium,它本是一款自动化测试工具,但是后来发现它同样可以用于网页爬虫,让浏览器帮助你自动爬取数据的工具,它可以以用户访问网页类似的行为去浏览网页并抓取数据,非常高效,感兴趣的可以尝试一下。

python爬虫百度百科-如何入门 Python 爬虫?相关推荐

  1. 我的第一个Python3 网络爬虫 百度百科爬虫

    最近学习Python 廖雪峰老师的Python 3教程 想要用项目练练手.Python网络爬虫看起来是不错的练手项目,于是着手学习爬虫的制作. 一开始并没有什么头绪,直到看到了慕课网的Python爬虫 ...

  2. 年薪百万的阿里P9 Python专家快速带你入门Python

    年薪百万的阿里P9 Python专家快速带你入门Python 本文的目的是尽可能地用简洁的语言介绍 Python 编程语言,以帮助初学者能够快速入门Python.下面,让我们开始吧 什么是 Pytho ...

  3. python爬虫案例教程~淘女郎、百度百科文本、规范化爬虫

    目录 1. 入门爬虫教程 2. 初级爬虫教程 2.1 爬取百度百科词条基本信息 2.2 爬取百度百科词条信息框数据 2.3 爬取百度百科中人物图片 3. 规范化.封装化的爬虫 1. 入门爬虫教程 py ...

  4. python爬虫百度百科-python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

  5. python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页

    目标分析: 目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL: ...

  6. python爬虫百度百科-python每日一题:网络爬虫百度百科

    # !控制主机程序 '''主机发送爬虫网址,从机进行爬取信息,并返回给主机''' #本次优化主要是:由于发送url与爬取url速度差异较大,造成发送url的队列中存在数据较多,占用内存. # 新方案是 ...

  7. python爬虫︱百度百科的requests请求、百度URL格式、网页保存、爬虫模块

    1 . 百科网页请求 1.1 网站解析requests与urllib.request对比: py3中主要用requests以及urllib.request两款库用来做网页内容的解析,两者的使用较多以r ...

  8. python爬虫原理-干货|如何入门 Python 爬虫?爬虫原理及过程详解

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! "入门"是 ...

  9. python爬虫基础知识点_入门Python爬虫知识点梳理

    [小宅按]爬虫基本原理就是通过网络请求从远程服务器下载数据的过程,而这个网络请求背后的技术就是基于 HTTP 协议.作为入门爬虫来说,用户需要了解 HTTP协议的基本原理,虽然 HTTP 规范用一本书 ...

最新文章

  1. NeHe OpenGL第十课:3D世界
  2. 陈勋教授的脑电信号降噪视频与讲座总结
  3. JS实现ul,li排序效果
  4. 机器学习算法与Python实践之(六)二分k均值聚类
  5. 解决问题:心态 原则 方法
  6. pro调用python libs_使用WingPro 7 设置Python路径的方法
  7. linux能运行英魂之刃吗,英魂之刃需要什么电脑配置
  8. Python计算有向图中所有节点出度和入度
  9. WIFI 网络操作--------------------笔记
  10. 传统JDBC的弊病和mybatis的解决方案
  11. 微软回应github服务器中断,GitHub怎么了?连续3天出现严重宕机情况微软未回应...
  12. SQLite Developer破解 cmd 运行 reg delete HKEY_CURRENT_USER\SharpPlus\SqliteDev /v StartDate /f
  13. 【C 语言】文件操作 ( 使用 fseek 函数生成指定大小文件 | 偏移量 文件字节数 - 1 )
  14. Kubernetes k8s理论篇
  15. 算法(赛马问题)图解
  16. 击退加拿大鹅,波司登成年轻人冬季新欢?
  17. Fabric.js 铅笔笔刷
  18. 小布老师-PL_SQL(第六讲)
  19. 【Qt】断言Q_ASSERT的使用
  20. Spring定时任务实现方式

热门文章

  1. 开发日记-20190601 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  2. 机器学习中的数据不平衡问题----通过随机采样比例大的类别使得训练集中大类的个数与小类相当,或者模型中加入惩罚项...
  3. 程序员职业规划的3个锦囊
  4. [USACO19JAN]Train Tracking 2——神仙结论题+DP
  5. go语言基础之递归函数的调用流程
  6. 基于WebSocket协议的iOS端即时聊天
  7. python中字符串的方法及注释
  8. 团队-科学计算器-模块测试过程
  9. BZOJ4008. [HNOI2015]亚瑟王 期望概率dp
  10. mysql 重置id