持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天, 点击查看活动详情
引言
今天带来一篇python的网络爬虫
网络爬虫的介绍
网络爬虫(又称为网页蜘蛛, 网络机器人,在 FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的 程序或者 脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
摘选自百度百科
可见,网络爬虫就是一个自动抓取一些信息的程序或脚本,接下来我们带大家学习一下python的网络爬虫
另外,爬虫并不是只能用python来实现,其他语言如Java等也可以实现网络爬虫,只不过python在这方面有很多优势。
关于库
我们爬虫有很多库,比如自带的urillb.requests,这里我们来介绍最常见的requests库
requests库并不是系统自带的库,所以我们需要用pip进行下载
win+R 打开 cmd
然后输入 pip install requests
进行requests库的下载
下载成功后,我们来正式进入爬虫的学习。
一个简单的爬虫Demo
import requests
url = "https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711"
result = requests.get(url=url)
print(result)
这是一个简单的爬虫小demo
首先首行我们导入requests库
然后定义一个字符型的url变量,后面值是目标网址
接下来我们调用requests.get()的方法
返回结果我们用一个result来接收
最后我们输出这个result
结果如下:
可能看上去有一些奇怪,这是什么东西?为什么不是这个网页的内容啊????
有兴趣的同学可以了解一些http的状态
这里不多赘述
200是成功的意思
获取结果中的内容
接下来我们来分别从文本的获取,图片的获取,音频的获取和视频的获取来写我们的文章
文本的获取
修改我们的代码
import requests
url = "https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711"
result = requests.get(url=url)
print(result.text)
可见,我们只把result加上了text属性,接下来我们运行这段py代码,输出了一大堆我们看不懂的代码
这啥玩意呢?
我们进入之前的url目标页面,然后右键,选择检查
发现一大堆代码
比对我们之前爬出来的东西
原来我们爬的是这些啊
总之,我们已经成功获取了所有的内容,虽然混合了大量的代码,当然有读者可能会问,怎么剔除我们不想要的内容呢?
这要涉及到正则表达式了
我们爬虫章就不多赘述了
图片的获取
图片的存储设计到二进制,所以我们要抓取二进制数据
这里我们获取的方面,不再使用.text,而是使用.content来获取二进制数据,我们这边在桌面新建一个xxx.jpg文件,接下来我们把爬取到的数据通过文件二进制读写的方式写入xxx.jpg文件,然后再打开,就是这张图片了
import requests
url = "https://scpic.chinaz.net/files/pic/pic9/201311/apic2098.jpg"
result = requests.get(url=url)
with open(r"C:\Users\DELL\Desktop\xxx.jpg","wb") as fp:
fp.write(result.content)
print("完成了")
接下来运行,然后打开jpg文件,就是我们之前的图片了
进阶
我们获取到图片的URL后,可以直接通过这种方式来下载图片,我们在有很多图片需要下载的时候,可以直接第一步获取当前页面的源码,然后正则筛选出所有图片的url,然后把这些url放入列表中,再循环遍历列表,分别放入不同的jpg文件中,实现自动下载。
音频的获取和视频的获取
音频的获取和视频的获取同理
我们还是获取.content二进制数据,然后分别写入.mp3文件(音乐)和.mp4(视频)
值得一提的是,很多视频现在都会分多个m3u8来存储,所以我们可能通过循环的方式来获取多个url
最后一点总结
有时候可能会被识别出爬虫导致失败
这里介绍几种伪装
User-Agent
我们F12进入开发者工具
找到网络部分
然后找到User-Agent部分
将其复制下来,用一个字典进行封装,(用""分别括住键值对)
然后在request.get中调用headers=你封装的字典
完成User-Agent的伪装
cookie
F12进入开发者工具
找到网络部分
然后找到cookiet部分
将其复制下来,用一个字典进行封装,(用""分别括住键值对)
然后在request.get中调用headers=你封装的字典
完成cookie的伪装
(我们字典中可以封装多个键值对,但是之间要用,隔开)
其他
网站可能还会检测其他的头信息,都可以尝试复制到字典中,另外网站可能还会封ip,我们可以使用代理或者延时,不密集的发送请求,另外网站可能不是get而是post请求,需要我们去开发者工具中查询。
另外,爬虫分良性爬虫和恶性爬虫,我们要遵守法律,不要做违法的事情!!!!!!