教你如何编写第一个爬虫
2019年不管是编程语言排行榜还是在互联网行业,Python一直备受争议,到底是Java热门还是Python热门也是一直让人争吵的话题。
目前互联网世界针对爬虫这一块已经通过自身的协议建立起一定的道德规范(Robots协议),但法律部分还在建立和完善中。那么Robots协议是什么呢?
Robots协议
Robots协议(爬虫协议)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。该协议是国际互联网界通行的道德规范,虽然没有写入法律,但是每一个爬虫都应该遵守这项协议。
下面以淘宝网的robots.txt为例进行介绍。
User-agent: Baiduspider #百度爬虫引擎
Allow: /article #允许访问/article.htm、/article/12345.com
Allow: /oshtml
Allow: /ershou
Disallow: /product/ #禁止访问/product/12345.com
Disallow: / #禁止访问除Allow规定页面外的其他所有页面
User-Agent: Googlebot #谷歌爬虫引擎
Allow: /article
Allow: /oshtml
Allow: /product #允许访问/product.htm、/product/12345.com
Allow: /spu
Allow: /dianpu
Allow: /wenzhang
Allow: /oversea
Disallow: /
在上面的robots文件中,淘宝网对用户代理为百度爬虫引擎进行了规定。
以Allow项的值开头的URL是允许robot访问的。例如,Allow:/article允许百度爬虫引擎访问/article.htm、/article/12345.com等。
以Disallow项为开头的链接是不允许百度爬虫引擎访问的。例如,Disallow:/product/不允许百度爬虫引擎访问/product/12345.com等。
最后一行,Disallow:/禁止百度爬虫访问除了Allow规定页面外的其他所有页面。
因此,当你在百度搜索“淘宝”的时候,搜索结果下方的小字会出现:“由于该网站的robots.txt文件存在限制指令(限制搜索引擎抓取),系统无法提供该页面的内容描述”,如图所示。百度作为一个搜索引擎,良好地遵守了淘宝网的robot.txt协议,所以你是不能从百度上搜索到淘宝内部的产品信息的。
淘宝的Robots协议对谷歌爬虫的待遇则不一样,和百度爬虫不同的是,它允许谷歌爬虫爬取产品的页面Allow:/product。因此,当你在谷歌搜索“淘宝iphone7”的时候,可以搜索到淘宝中的产品,如图所示。
当你爬取网站数据时,无论是否仅供个人使用,都应该遵守Robots协议。
加入VIP会员,上百本电子书、上千门课程等你免费学
网络爬虫的约束
除了上述Robots协议之外,我们使用网络爬虫的时候还要对自己进行约束:过于快速或者频密的网络爬虫都会对服务器产生巨大的压力,网站可能封锁你的IP,甚至采取进一步的法律行动。因此,你需要约束自己的网络爬虫行为,将请求的速度限定在一个合理的范围之内。
爬取网站的时候需要限制自己的爬虫,遵守Robots协议和约束网络爬虫程序的速度;在使用数据的时候必须遵守网站的知识产权。
所以只要你合理利用就不会违法,爬虫还是可以学的哦,毕竟爬虫对数据分析真的非常有用,那么爬虫该怎么学呢?今天来教大家编写一个简单的爬虫!
编写第一个简单的爬虫
第一步:获取页面
#!/usr/bin/python
# coding: utf-8
import requests #引入包requests
link = "http://www.santostang.com/" #定义link为目标网页地址
# 定义请求头的浏览器代理,伪装成浏览器
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers) #请求网页
print (r.text) #r.text是获取的网页内容代码
上述代码就能获取博客首页的HTML代码,HTML是用来描述网页的一种语言,也就是说网页呈现的内容背后都是HTML代码。如果你对HTML不熟悉的话,可以先去w3school(http://www.w3school.com.cn/html/index.asp)学习一下,大概花上几个小时就可以了解HTML。
在上述代码中,首先import requests引入包requests,之后获取网页。
(1)首先定义link为目标网页地址。
(2)之后用headers来定义请求头的浏览器代理,进行伪装
(3)r是requests的Response回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
运行上述代码得到的结果如图所示。
第二步:提取需要的数据
#!/usr/bin/python
# coding: utf-8
import requests
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
#找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a,提取a里面的字符串,strip()去除左右空格
title = soup.find("h1", class_="post-title").a.text.strip()
print (title)
在获取整个页面的HTML代码后,我们需要从整个网页中提取第一篇文章的标题。
这里用到BeautifulSoup这个库对页面进行解析,BeautifulSoup将会在第4章进行详细讲解。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的标题,并且打印出来
soup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章标题,定位到class是"post-title"的h1元素,提取a元素,提取a元素里面的字符串,strip()去除左右空格。
对初学者来说,使用BeautifulSoup从网页中提取需要的数据更加简单易用。
那么,我们怎么从那么长的代码中准确找到标题的位置呢?
这里就要隆重介绍Chrome浏览器的“检查(审查元素)”功能了。下面介绍找到需要元素的步骤。
步骤01
使用Chrome浏览器打开博客首页www.santostang.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,如图所示。
步骤02
出现如下图所示的审查元素页面。单击左上角的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。
步骤03
在代码中找到标蓝色的地方,为echarts学习笔记(2)–同一页面多图表。我们可以用soup.find("h1",class_="post-title").a.text.strip()提取该博文的标题。
第三步:存储数据
import requests
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
title = soup.find("h1", class_="post-title").a.text.strip()
print (title)
# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
with open('title_test.txt', "a+") as f:
f.write(title)
扫码加入VIP会员免费读
推荐理由:
基础知识+完整的知识模块+4个实践案例的教学,让读者快速掌握爬虫程序的编写,快速成长为爬虫高手
更多Python好书推荐
福利
参与方式:只要在本文留言参与话题“技术书籍上,你会选择购买纸质书籍还是电子书籍,为什么呢?”即可有机会获得价值129元的可擦笔记本一个,只有2个名额哦~
获奖公布时间:2月21日14:00
如果可以的话也可扫码入群一起交流学习哦~电子书的任何问题都可以在群里沟通!
点击“阅读原文”,上百本电子书等你免费读!