什么是互联网
互联网也叫互连网,万物互连,是庞大的网络连接而成,互联网的结构就像一张大蛛网,如下图
爬虫,爬的是虫,也是数据
爬虫也叫网络蜘蛛,负责捕食互联网上的数据,是一种以网络数据为食的神奇生物。
为什么要爬虫
这是个信息爆炸的时代,庞大的信息量,如果可以换成生活垃圾,那估计可以环绕太阳系无数圈了,但是网络上的信息数据却不都是垃圾,也有被埋没的金子。书上把数据比作未提纯的石油,需要不断挖掘和提纯,那么爬虫就是挖掘的一种方式。
我们无法短时间的应对网络上大规模的数据,但是爬虫可以,他就像一只蜘蛛,准备捕食,将网络上大规模的数据扒下来。
爬虫的是怎么爬的
一个简单的例子:蛛网不止一张,蜘蛛想要去哪张蛛网捕食,这就需要一个url(简单说就是一个网址)了,接下来就是去到这个地址(想这个地址发送请求),接下来,获取网页数据。这就爬完了。
先看一段简单的爬虫代码
from urllib.request import urlopen
# 要访问的地址
url = "http://www.baidu.com/"
# 发送请求
response = urlopen(url)
# 读取内容
info = response.read()
# 打印内容
# 将内容转码为字符串
# print(info.decode())
一段python的爬虫代码就是简单的几步,但是此时爬回来的数据就是一段未经任何处理的原油,或者还未开采。我们可以看下爬回来的数据
十分的乱,就是一堆没啥用的HTML的代码,可以说是一堆脏数据,当然这是最简单的爬虫,我们并没有添加想要爬取的具体目标,仅仅只是扒下代码。
简单的爬虫实战–爬取贴吧页面代码
from urllib.request import Request, urlopen
from urllib.parse import quote
def get_html(url):
# 定义User_Agent(用户代理)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
}
# 封装request对象
request = Request(url, headers=headers)
# 发送请求
response = urlopen(request)
# 返回HTML代码
return response.read().decode()
def save_html(html,filename):
# 爬取内容写入
with open(filename, 'w', encoding="utf-8") as f:
f.write(html)
def main():
num = int(input("请输入要获取多少页:"))
content = input("请输入要获取贴吧的名字:")
for i in range(num):
# 目标地址
url = f"https://tieba.baidu.com/f?kw={quote(content)}&ie=utf-8&pn={i*50}"
html = get_html(url)
filename = '第'+str(i+1)+'页.html'
save_html(html, filename)
if __name__ == '__main__':
main()
爬虫也是有技巧的,如我们下面代码中kw和pn的参数,其实我们在分析几个页面的url,就可以知道,kw代表的是关键字,pn代表的是一页有多少个数据,那么通过一些技巧,我们就可以快速的爬取网页内容。
url = f"https://tieba.baidu.com/f?kw={quote(content)}&ie=utf-8&pn={i*50}"
爬虫的合法性
爬虫既然作为一门公开且热门的技术,自然是合法的,但是,凡是也有例外,如,你想爬取一个网站,你比较心急,想快速爬取,写的脚步是一秒钟访问网站10000次,但是人家的网站最大的访问量只有2000,由于你的强制访问,导致人家的服务器奔溃了,你这种行为就会被认为是网络攻击。
例子很现实,做爬虫最好不要涉及隐私,恶意竞争,涉及敏感信息等等,不然你就真的趴下了。