前言
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。
一般来说,传统的拿数据的做法是:通过浏览器上网,手动下载所需要的数据。其实在这背后,浏览器做了很多我们看不见的工作,而只有了解浏览器的工作原理后,才能真正理解爬虫在帮我们做什么。
而爬虫可以模拟浏览器去向服务器发出请求;其次,等服务器响应后,爬虫程序还可以代替浏览器帮我们解析数据;接着,爬虫可以根据我们设定的规则批量提取相关数据,而不需要我们去手动提取;最后,爬虫可以批量地把数据存储到本地。
爬虫的工作分为四步:
1)获取数据:爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据
2)解析数据:爬虫程序会把服务器返回的数据解析成我们能读懂的格式
3)提取数据:爬虫程序再从中提取出我们需要的数据
4)存储数据:爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析
robots协议
robots
协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。
我们使用robots
协议的场景通常是:看到想获取的内容后,检查一下网站是否允许爬取。因此我们只需要能找到、简单读懂robots协议就足够了。
如何找到并查看网站的
robots
协议呢,很简单,在网站的域名后加上/robots.txt
就可以了。需要提醒的是,如果一个网站不那么规范,或许没有robots协议。简单案例
使用 requests库来获取数据
import requests # 请求的链接 url = 'xxx' # 获取Response对象 res = requests.get(url) # Response对象的常用属性: # 响应状态码 res.status_code # 定义Response对象获的编码 res.encoding # 将Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载 res.text # 将Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载 res.content
1.获取小说文字
import requests res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md') if res.status_code == 200: # 将Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载 text = res.text print(text[:800]) with open('./1.txt', 'w', encoding='utf-8') as file: file.write(text) else: print('请求失败!')
2.请求图片
import requests res = requests.get('https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1806047429,2669047046&fm=26&gp=0.jpg') if res.status_code == 200: # 二进制数据 # 将Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载 content = res.content # 保存图片 with open('./img1.jpg', 'wb') as file: file.write(content) print('图片保存成功!') else: print('图片请求失败!')
3.请求mp3
import requests url = 'https://static.pandateacher.com/Over%20The%20Rainbow.mp3' res = requests.get(url) if res.status_code == 200: with open('./music1.mp3', 'wb') as music: music.write(res.content) print('音乐下载成功!') else: print('请求失败!')