前言
从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片
这一件事情。希望可以做好。
为了写好爬虫,我们需要准备一个火狐浏览器,还需要准备抓包工具,抓包工具,我使用的是CentOS自带的tcpdump,加上wireshark ,这两款软件的安装和使用,建议你还是学习一下,后面我们应该会用到。
网络请求模块requests
Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模块就是requests。
安装requests
打开终端:使用命令
pip3 install requests
等待安装完毕即可使用
接下来在终端中键入如下命令
# mkdir demo
# cd demo
# touch down.py
上面的linux命令是 创建一个名称为demo
的文件夹,之后创建一个down.py
文件,你也可以使用GUI工具,像操作windows一样,右键创建各种文件。
为了提高在linux上的开发效率,我们需要安装一个visual studio code
的开发工具
对于怎么安装vscode,参考官方的https://code.visualstudio.com/docs/setup/linux 有详细的说明。
对于centos则如下:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
然后用yum命令安装
yum check-update
sudo yum install code
安装成功之后,在你的CentOS中会出现如下画面
接着说我们上面的操作 ,因为我们这边是用gnome图形界面,所以后面的有些操作,我直接用windows的操作风格讲解了
打开软件>文件>打开文件>找到我们刚刚创建的down.py
文件
之后,在VSCODE里面输入
import requests #导入模块
def run(): #声明一个run方法
print("跑码文件") #打印内容
if __name__ == "__main__": #主程序入口
run() #调用上面的run方法
tips:本教程不是Python3的基础入门课,所以有些编码基础,默认你懂,比如Python没有分号结尾,需要对齐格式。我会尽量把注释写的完整
按键盘上的ctrl+s
保存文件,如果提示权限不足,那么按照提示输入密码即可
通过终端进入demo目录,然后输入
python3 down.py
显示如下结果,代表编译没有问题
[root@bogon demo]# python3 down.py
跑码文件
接下来,我们开始测试requests
模块是否可以使用
修改上述代码中的
import requests
def run():
response = requests.get("http://www.baidu.com")
print(response.text)
if __name__ == "__main__":
run()
运行结果(出现下图代表你运行成功了):
接下来,我们实际下载一张图片试试,比如下面这张图片
修改代码,在这之前,我们修改一些内容
由于每次修改文件,都提示必须管理员权限,所以你可以使用linux命令修改权限。
[root@bogon linuxboy]# chmod -R 777 demo/
import requests
def run():
response = requests.get("http://www.newsimg.cn/big201710leaderreports/xibdj20171030.jpg")
with open("xijinping.jpg","wb") as f :
f.write(response.content)
f.close
if __name__ == "__main__":
run()
运行代码之后,发现在文件夹内部生成了一个文件
但是打开文件之后发现,这个文件并不能查阅,这代表这个文件压根没有下载下来
我们继续修改代码,因为有的服务器图片,都做了一些限制,我们可以用浏览器打开,但是使用Python代码并不能完整的下载下来。
修改代码
import requests
def run():
# 头文件,header是字典类型
headers = {
"Host":"www.newsimg.cn",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5383.400 QQBrowser/10.0.1313.400"
}
response = requests.get("http://www.newsimg.cn/big201710leaderreports/xibdj20171030.jpg",headers=headers)
with open("xijinping.jpg","wb") as f :
f.write(response.content)
f.close
if __name__ == "__main__":
run()
好了,这次在终端编译一下python文件
python3 down.py
发现图片下载下来了
我们重点查看上述代码中 requests.get
部分,添加了一个headers
的实参。这样我们程序就下载下来了完整的图片。
Python爬虫页面分析
有了上面这个简单的案例,我们接下来的操作就变的简单多了。爬虫是如何进行的呢?
输入域名->下载源代码->分析图片路径->下载图片
上面就是他的步骤
输入域名
我们今天要爬的网站叫做 http://www.meizitu.com/a/pure.html
为啥爬取这个网站,因为好爬。
好了,接下来分析这个页面
做爬虫很重要的一点,就是你要找到分页的地方,因为有分页代表着有规律,有规律,我们就好爬了(可以做的更智能一些,输入首页网址,爬虫自己就能分析到这个网站中的所有地址)
上面图片中,我们发现了分页,那么找规律吧
使用火