00 初识爬虫

# Author:Nimo_Ding
'''
爬虫的工作原理:
第0步:获取数据。
    爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。
第1步:解析数据。
    爬虫程序会把服务器返回的数据解析成我们能读懂的格式。
第2步:提取数据。
    爬虫程序再从中提取出我们需要的数据。
第3步:储存数据。
    爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。
这就是爬虫的工作原理啦,无论之后的学习内容怎样变化,其核心都是爬虫原理。
'''
# 体验爬虫
# 获取数据,用requests.get()方法

# 引入requests库
import requests

# requests.get是在调用requests库中的get()方法,它向服务器发送了一个请求,
# 括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。
# 我们把这个响应返回的结果response对象赋值给变量res

# 这里的网址是小说三国演义
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
print(res)
# <Response [200]>
print(type(res))
# <class 'requests.models.Response'>
# 从结果看出,res这个对象是属于requests.models.Response类,


# 先看下response对象常用的四个属性:
# 1、检查请求是否成功
print(res.status_code)
# 200 # 200代表请求成功

# 2、把response对象的内容转换成二进制数据,适用于图片音频视频的下载。
# print(res.content)

# 示例:下载图片https://res.pandateacher.com/2018-12-18-10-43-07.png
import requests
res_pic=requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
pic=res_pic.content # 将response对象的内容以二进制数据的形式返回
photo=open('00ppt.jpg','wb') # 图片内容需要以二进制wb读写,
                           # 相当于在当前路径下新建了一个ppt.jpg文件。
photo.write(pic)           # 获取pic的二进制内容写入图片中
photo.close()  # 关闭文件

# 3、把response对象内容转换成字符串数据,即打印了小说内容
# 适用于文字、网页源代码的下载
# print(res.text)
print(res.text[500:550]) # 这里只输出55个字

# 我们保存到文件中:
novel=open('00《三国演义》.txt','a+') # 创建txt文档,指针放在文件末尾,追加内容。
novel.write(res.text) # 写进文件中
novel.close()  # 关闭文件

# 4、定义response对象的编码
print(res.encoding)
# utf-8

# 还以三国演义小说为例,当我们得到res对象后,把res对象的编码定义成gbk
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
res.encoding='gbk'
print(res.text[:40])
# 这样打印出前40个字是乱码的情况:
'''
    ## 涓夊浗婕斾箟
    浣滆�咃細缃楄疮涓�
    ### 绗�涓�鍥� 瀹存
'''

# 因为目标数据本身有它的编码类型,之前我们用print(res.encoding)查看了是utf-8。
# 而编解码是要用同一种编码类型的,这里res.encoding='gbk'就直接定义成了gbk,跟本身的utf-8就不一致,所以导致乱码。

# 一般我们不需要对返回的对象做编码定义res.encoding='gbk',因为requests库会对数据的编码类型做出自己的判断。
# 但是这个判断可能准确也可能不准确。
# 总之,我们遇上文本乱码的时候才考虑用res.encoding

 

 

 

 

 

总结: 

 

'''
补充:
爬虫伦理:
就像是两个人在来来往往的相处中,会考虑对方的感受;在互联网的世界中,我们也要考虑一下服务器对爬虫的感受是怎样的。
我们说过,服务器其实就是一个超级电脑,拥有这个服务器的公司,对爬虫其实也有明确的态度。
通常情况下,服务器不太会在意小爬虫,但是,服务器会拒绝频率很高的大型爬虫和恶意爬虫,因为这会给服务器带来极大的压力或伤害。
不过,服务器在通常情况下,对搜索引擎是欢迎的态度(刚刚讲过,谷歌和百度的核心技术之一就是爬虫)。
当然,这是有条件的,通常这些条件会写在robots协议里。

robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol),
这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。
我们使用robots协议的场景通常是:看到想获取的内容后,检查一下网站是否允许爬取。
因此我们只需要能找到、简单读懂robots协议就足够了。

我们截取了一部分淘宝的robots协议(http://www.taobao.com/robots.txt),
可以看到淘宝对百度和谷歌这两个爬虫的访问规定,以及对其它爬虫的规定。
User-agent:  Baiduspider # 百度爬虫
Allow:  /article # 允许访问 article 
Allow:  /oshtml # 允许访问 oshtml 
Allow:  /ershou # 允许访问 ershou 
Allow: /$ # 允许访问根目录,即淘宝主页
Disallow:  /product/ # 禁止访问product文件夹下面的所有文件,但是product文件夹本身允许被访问
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面
​
User-Agent:  Googlebot # 谷歌爬虫
Allow:  /article
Allow:  /oshtml
Allow:  /product # 允许访问product文件夹及product文件夹下面的所有文件
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面
​
…… # 文件太长,省略了对其它爬虫的规定,想看全文的话,点击上面的链接
​
User-Agent:  * # 其他爬虫
Disallow:  / # 禁止访问所有页面

可以看出robots协议是“分段”的,每个段落都含有以下两种字段:
    一种是User-agent:,
    另一种是Allow:或Disallow:

User-agent表示的是爬虫类型,上面的示例代码注释了“百度爬虫”和“谷歌爬虫”,
          我们自己写的爬虫一般要看User-Agent: *,*指向所有未被明确提及的爬虫。
Allow代表允许被访问,Disallow代表禁止被访问。字段对应的值都含有路径分隔符/,
     限制了哪些或哪一层目录的内容是允许或者禁止被访问的。
     可以对比上述百度爬虫Disallow: /product/和谷歌爬虫Allow: /product的注释行理解一下。
     比如淘宝禁止其他爬虫访问所有页面,也就是说,我们自己写的爬虫不被欢迎爬取www.taobao.com域名下的任何网页。
     有趣的是,淘宝限制了百度对产品页面的爬虫,却允许谷歌访问。
     所以,当你在百度搜索“淘宝网”时,会看到下图的这两行小字。
        由于该网站的robots.txt文件存在限制指令(限制搜索引擎抓取),
        系统无法提供该页面的内容描述 - 了解详情

因为百度很好地遵守了淘宝网的robots.txt协议,自然,你在百度中也查不到淘宝网的具体商品信息了。
互联网并非法外之地,和爬虫相关的法律也在建立和完善之中,目前通用的伦理规范就是robots协议,我们在爬取网络中的信息时,应该有意识地去遵守这个协议。
网站的服务器被爬虫爬得多了,也会受到较大的压力,因此,各大网站也会做一些反爬虫的措施。不过呢,有反爬虫,也就有相应的反反爬虫,这些我们会在后面关卡中会详细说。
爬虫就像是核技术,人们可以利用它去做有用的事,也能利用它去搞破坏。
恶意消耗别人的服务器资源,是一件不道德的事,恶意爬取一些不被允许的数据,还可能会引起严重的法律后果。
工具在你手中,如何利用它是你的选择。当你在爬取网站数据的时候,别忘了先看看网站的robots协议是否允许你去爬取。
同时,限制好爬虫的速度,对提供数据的服务器心存感谢,避免给它造成太大压力,维持良好的互联网秩序,也是我们该做的事

有的同学可能就要问了:“域名是什么?域名和URL(网址)有什么关系?”很敏锐哟!
我们前面说过,如果把一个网页类比为一幢房子,URL指示了网页的地址,
就像房子在地球上的详细到某某街道某某号的具体地址,那么域名就像房子所在的国家,指示了网站的地址。

如果我们看到一个网页,想爬上面的内容,怎么找到它的URL我们刚刚学过了,
如果网页的URL是https://pypi.org/project/requests/,那么,此网站的域名是pypi.org;
如果网页的URL是http://cn.python-requests.org/zh_CN/latest/,那么网站的域名是cn.python-requests.org。
我们再来看一个,
如果网页的URL是https://www.taobao.com/markets/3c/tbdc?spm=a21bo.2017.201867-main.11.5af911d9VV8EyS,
那么网站的域名是www.taobao.com。


'''

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值