以下原文

get新技能,学习写爬虫?!


一、为啥学爬虫?

看到一个帖子,有人用python爬虫在京东抢口罩,实现实时监测、实时抢购。

可以说很调皮了~


这是爬虫在电商领域的一个小应用,除此之外你还能使用爬虫进行:商品抓取、价格监控、评论抓取、竞品分析、动态定价等等。

其他领域,你可以使用爬虫做:房源监控分析、网络舆情监测、精准客户获取、新闻资讯筛选、地信数据抓取、金融股票分析等等。

这些对于从事相关行业的分析人员还是很有学习意义的。

当然你还可以用爬虫搞一下骚操作:知乎妹子高清图片、言情小说、b站学习视频、豆瓣电影书籍、抖音美女视频......这些都可以爬下来收藏。[逃

之前一直很火的用python登录12306抢票,也是爬虫的杰作,不过现在越来越难了,各种反爬设置。大家有兴趣可以去github上看一下这个项目开源代码。

学爬虫当然离不开python,所以这10天你还能get python编程,当今最火的AI编程语言。

当然你也可以用集成好的第三方软件来爬,像八爪鱼、后羿之类的,但我还是建议用python来写爬虫,能学到更多东西。

二、什么是爬虫?

爬虫是一个形象的叫法,网络爬虫其实是网络数据采集,针对性地用代码实现网络上各种数据(文字、图片、视频)的抓取。我们熟知的谷歌、百度等搜索引擎,也是使用的爬虫技术。

通俗点说,爬虫就像是一个穿梭于网络世界的智能蜘蛛,你给它一个网址(url),然后设定规则,它就能突破重重险阻,把你想要的数据抓取下来,然后保存。

能实现爬虫的语言有很多,像Java、PHP、Python、C#...都可以用各种方式达到你的要求,那为什么要用python呢?

人生苦短,python当歌!

python是一门高级编程语言,语法简介,十分适合初学者。因此拥有了超级强大的开发社区,捣鼓出各种神奇的第三方库,比如requests、beautifulsoup、scrapy、xpath、selenium等,都是爬虫界的利器。

当然网络爬虫有利有弊,你可以爬人家的数据,但也要承担可能存在的法律风险。慎重!

三、python爬虫有些学习资源?

本来想先简单介绍一下如何学习python爬虫,但还是先把学习资源讲一讲,毕竟好多资源控 ̄□ ̄

对于小白来说,首先是学习python语法。

python学习家族有三个派别:视频派、教程派、书籍派。

喜欢看视频的就去b站吧,python视频教学相当丰富,选择播放量前几名的系统学习下,听说小甲鱼的就还不错。

当然有钱的你,可以选择一些网上课程,像腾讯课堂、网易云课堂里面的课。

不要问为什么,花钱买心安。比如我猜大方的你,会打赏这篇回答[hah

教程派的选择很多了,像菜鸟教程、w3cschool、廖雪峰、python官档...

推荐大家先看菜鸟教程、再看廖雪峰,官档随时查询。

再推荐几个可能会用到的python学习资源:

  • Python简明教程(Python3)[1]
  • Python3.7.4官方中文文档[2]
  • Python标准库中文版[3]
  • 廖雪峰 Python 3 中文教程[4]
  • Python 3.3 官方教程中文版[5]
  • Python3 Cookbook 中文版[6]
  • 笨办法学 Python[7] (PDF[8]EPUB[9])
  • 《Think Python 2e》最新版中文[10]
  • Python 核心编程 第二版 中文[11]
  • 菜鸟教程 Python3基础[12]
  • W3cschool Python3基础[13]
  • Python最佳实践指南[14]
  • Python 精要教程[15]
  • Python进阶 中文版[16]
  • 中文 Python 笔记[17]
  • 莫烦python教程[18]
  • The Hitchhiker's Guide to Python[19]
  • 草根学 Python[20]
  • Kaggle Python基础学习(英文)[21]
  • 李笑来-自学是门手艺-python教程[22]

对于书籍派来说,买一本扎实的python语法书,确实是必须的。

我之前用过的像《python编程 从入门到实践》、《笨方法学python3》,都是适合初学者看的。

爬虫的学习资源也非常多。

像崔庆才大佬的网站、b站视频、官方文档、爬虫教材等,下面给大家参考:

  • awesome-spider 爬虫集合[23]
  • python模拟登陆&爬虫[24]
  • Python爬虫代理IP池(proxy pool)[25]
  • Python入门网络爬虫之精华版[26]
  • Python3网络爬虫实战[27]
  • 有趣的Python爬虫和Python数据分析小项目[28]
  • Python入门爬虫[29]
  • Requests 英文文档[30]
  • Requests 中文文档[31]
  • Scrapy 英文文档[32]
  • Scrapy 中文文档[33]
  • Pyspider 英文文档[34]
  • BeautifulSoup中文文档[35]
  • BeautifulSoup英文文档[36]
  • Xpath教程[37]
  • 崔庆才网站[38]

还有一本python爬虫书也是很不错的,适合入门。

image.png

四、如何入门python爬虫?

终于讲到入门实操了,之前我写过一个爬虫入门回答,这里搬运过来。

前言

本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫!

想要入门Python 爬虫首先需要解决四个问题

  • 熟悉python编程
  • 了解HTML
  • 了解网络爬虫的基本原理
  • 学习使用python爬虫库

1、你应该知道什么是爬虫?

网络爬虫,其实叫作网络数据采集更容易理解。

就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。

归纳为四大步:

  • 根据url获取HTML数据
  • 解析HTML,获取目标信息
  • 存储数据
  • 重复第一步

这会涉及到数据库、网络服务器、HTTP协议、HTML、数据科学、网络安全、图像处理等非常多的内容。但对于初学者而言,并不需要掌握这么多。

2、python要学习到什么程度

如果你不懂python,那么需要先学习python这门非常easy的语言(相对其它语言而言)。

编程语言基础语法无非是数据类型、数据结构、运算符、逻辑结构、函数、文件IO、错误处理这些,学起来会显枯燥但并不难。

刚开始入门爬虫,你甚至不需要去学习python的类、多线程、模块之类的略难内容。找一个面向初学者的教材或者网络教程,花个十几天功夫,就能对python基础有个三四分的认识了,这时候你可以玩玩爬虫喽!

当然,前提是你必须在这十几天里认真敲代码,反复咀嚼语法逻辑,比如列表、字典、字符串、if语句、for循环等最核心的东西都得捻熟于心、于手。

教材方面比较多选择,我个人是比较推荐python官方文档以及python简明教程,前者比较系统丰富、后者会更简练。

3、为什么要懂HTML

前面说到过爬虫要爬取的数据藏在网页里面的HTML里面的数据,有点绕哈!

维基百科是这样解释HTML的:

超文本标记语言(英语:HyperTextMarkupLanguage,简称:HTML)是一种用于创建网页[39]的标准标记语言[40]。HTML是一种基础技术,常与CSS[41]、JavaScript[42]一起被众多网站用于设计网页、网页应用程序以及移动应用程序的用户界面[3][43]。网页浏览器[44]可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言[45]。

总结一下,HTML是一种用于创建网页的标记语言,里面嵌入了文本、图像等数据,可以被浏览器读取,并渲染成我们看到的网页样子。

所以我们才会从先爬取HTML,再 解析数据,因为数据藏在HTML里。

学习HTML并不难,它并不是编程语言,你只需要熟悉它的标记规则,这里大致讲一下。

HTML标记包含标签(及其属性)、基于字符的数据类型、字符引用和实体引用等几个关键部分。

HTML标签是最常见的,通常成对出现,比如<**h1**></**h1**>

这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容(文本、图像等),有些标签没有内容,为空元素,如<**img**>

以下是一个经典的Hello World[46]程序的例子:

<!DOCTYPE html>
<html>
 <head>
   <title>This is a title</title>
 </head>
 <body>
   <p>Hello world!</p>
 </body>
</html>

HTML文档由嵌套的HTML元素构成。它们用HTML标签表示,包含于尖括号中,如<**p**>[56][47]

在一般情况下,一个元素由一对标签表示:“开始标签”<**p**>与“结束标签”</**p**>。元素如果含有文本内容,就被放置在这些标签之间。

4、了解python网络爬虫的基本原理

在编写python爬虫程序时,只需要做以下两件事:

  • 发送GET请求,获取HTML
  • 解析HTML,获取数据

这两件事,python都有相应的库帮你去做,你只需要知道如何去用它们就可以了。

5、用python库爬取百度首页标题和图片

首先,发送HTML数据请求可以使用python内置库urllib,该库有一个urlopen函数,可以根据url获取HTML文件。

这里尝试获取百度首页“https://www.baidu.com/[48]”的HTML内容:

# 导入urllib库的urlopen函数
from urllib.request import urlopen
# 发出请求,获取html
html = urlopen("https://www.baidu.com/")
# 获取的html内容是字节,将其转化为字符串
html_text = bytes.decode(html.read())
# 打印html内容
print(html_text)

看看效果:

我们看一下真正百度首页html是什么样的,如果你用的是谷歌浏览器,在百度主页打开设置>更多工具>开发者工具,点击element,就可以看到了:

对比一下你就会知道,刚才通过python程序获取到的HTML和网页中的一样!

获取了HTML之后,接下就要解析HTML了,因为你想要的文本、图片、视频都藏在HTML里,你需要通过某种手段提取需要的数据。

python同样提供了非常多且强大的库来帮助你解析HTML,这里以著名的python库BeautifulSoup为工具来解析上面已经获取的HTML。

BeautifulSoup是第三方库,需要安装使用。

在命令行用pip安装就可以了:

pip install bs4

BeautifulSoup会将HTML内容转换成结构化内容,你只要从结构化标签里面提取数据:

比如,我想获取百度首页的标题“百度一下,我就知道”,怎么办呢?

这个标题是被两个标签套住的,一个是一级标签<head><head>,另一个是二级标签<title><title>,所以只要从标签中取出信息:

# 导入urlopen函数
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("http://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 打印标题
print(title)

看看结果:

这样就搞定了,成功提取出百度首页的标题。

如果我想要下载百度首页logo图片呢?

第一步先获取该网页所有图片标签和url,这个可以使用BeautifulSoup的findAll方法,它可以提取包含在标签里的信息。

一般来说,HTML里所有图片信息会在“img”标签里,所以我们通过findAll("img")就可以获取到所有图片的信息。

# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("http://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 使用find_all函数获取所有图片的信息
pic_info = obj.find_all('img')
# 分别打印每个图片的信息
for i in pic_info:
   print(i)

看看结果:

打印出了所有图片的属性,包括class(元素类名)、src(链接地址)、长宽高等。

其中有百度首页logo的图片,该图片的class(元素类名)是index-logo-src。

[<img class="index-logo-src" height="129" hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" usemap="#mp" width="270"/>, <img alt="到百度首页" class="index-logo-src" src="//www.baidu.com/img/baidu_jgylogo3.gif" title="到百度首页"/>]

可以看到图片的链接地址在src这个属性里,我们要获取图片链接地址:

# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("http://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 打印链接
print(logo_url)

结果:

获取地址后,就可以用urllib.urlretrieve函数下载logo图片:

# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 导入urlretrieve函数,用于下载图片
from urllib.request import urlretrieve
# 请求获取HTML
html = urlopen("http://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 使用urlretrieve下载图片
urlretrieve(logo_url, 'logo.png')

最终图片保存在'logo.png':

6、结语

本文用爬取百度首页标题和logo图片的案例,讲解了python爬虫的基本原理以及相关python库的使用,这是比较初级的爬虫知识,还有很多优秀的python爬虫库和框架等待后续去学习。

当然,掌握本文讲的知识点,你就已经入门python爬虫了。加油吧,少年!

五、赶紧行动吧!

疫情特殊时期,很多人在家闲着,趁这个机会学习python爬虫,上班后也能继续学习python大法。


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 小白如何入门Python爬虫
  2. Python异步爬虫进阶必备,效率杠杠的!
  3. 钻漏洞,他用爬虫非法获取 1500 万余条个人信息,倒卖获利 54 万被判
  4. 小伙Python爬虫并自制新闻网站,太好玩了
  5. 用两种非传统的爬虫,我把CSDN博主的底裤都给爬出来了!
  6. 爬虫进阶:反反爬虫技巧
  7. Scrapy爬虫实战| 手把手教你使用CrawlSpider框架爬取数码宝贝全图
  8. GitHub上3k+star的python爬虫库你了解吗?详解MechanicalSoup爬虫
  9. 十分钟带你了解PHP实现爬虫的过程

随机推荐

  1. Android OpenGL例子学习
  2. Android使用百度地图SDK获得当前设备位置
  3. Android逆向分析常用网站
  4. Linux系统Android SDK 下载版本,报错Warni
  5. android(2.0以后版本) 中读取联系人和通
  6. 更新SDK后eclipse报错This Android SDK r
  7. Android中常用的Intent.Action整理
  8. android 常用JVM配置参数
  9. webView去掉右侧导航条
  10. android之android.os.NetworkOnMainThrea