【爬虫开发】基于项目实战,从开发到部署经验总结
开发过程
1.通过IDE开发
Chrome 插件
到插件商店,搜索selenium IDE安装。
Firefox插件
没有条件的使用firefox插件,同样搜索selenium IDE安装。
开发
安装好后,打开插件,录制下自己的浏览器操作。录制过程中,可以删去一些没有意义的操作,这样可以让导出脚本时更加简洁。
通过上一步录制完成后,导出录制脚本,语言选择python.即可得到完整的python脚本代码。
selenium IDE导出的python已经可以直接使用了,也可以进一步精简,比如去除pytest依赖。
到后期会发现,如果是多个爬虫同时运行,chrome运行起来特别耗内存。所以考虑抛开selenium和浏览器,直接访问目标网站api.
2.通过postman开发
postman开发是api开发的精华。待后续补充
3. scrapy开发
待补充
4. 添加代理
代理购买网站
大量流量访问目标网站会造成ip封禁,临时解决方案是等待几分钟后再访问。永久解决方案是使用代理ip。
SmartProxy
价格高,但确实好用
部署过程
部署环境是CentOS
1.宝塔部署
宝塔环境下python的使用
centOS自带python 2.7,但是我们的开发是基于python3的。centOS安装宝塔后,使用如下命令
btpython -V
会发现btpython就是python 3.8,所以不需要再安装pyenv等python版本管理器了。
在centOS上安装Chrome
- 修改yum源
在/etc/yum.repos.d/目录下新建文件google-chrome.repo,向其中添加如下内容
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
- yum安装
yum -y install google-chrome-stable
Google官方源可能在中国无法使用,导致安装失败或者在国内无法更新,可以添加以下参数来安装:
yum -y install google-chrome-stable --nogpgcheck
- 检查chrome版本,安装对应chromedriver
google-chrome -v
在centOS上安装火狐浏览器
可以直接使用yum安装
yum install firefox
安装Webdriver
- ChromeDriver
淘宝镜像
官方链接 - GeckoDriver适用于火狐浏览器
Github链接
Geckodriver与Firefox版本映射表 - SafariDriver(适用于mac开发)
Safari已自带webriver,无需单独安装但需要开启。菜单/开发/允许远程调试。menu/develop/Allow remote automation
所有webriver放置于/usr/local/bin文件夹下
设置无头浏览器
开发时不会使用无头浏览器,但是部署到服务器后建议使用无头模式。无头模式的示例代码如下
from selenium import webdriver
options = webdriver.ChromeOptions()
# options = webdriver.FirefoxOptions()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)
driver.get("https://www.qq.com")
driver.get_screenshot_as_file("test.png")
driver.quit()
2. supervisor监控
之所以使用supervisor监控,是因为爬虫总会因为各种原因导致进程意外退出,使用supervisor可以在进程退出时自动重启。
supervisor安装
- 宝塔下的supervisor安装
建议使用宝塔的supervisor插件,傻瓜式安装 - 非宝塔下的supervisor安装
pip install supervisor
- macOS下的supervisor安装
brew install supervisor
mac 安装supervisor后,可以启动浏览器输入
http://localhost:9001
即可可视化管理supervisor项目
supervisor的命令行启动
宝塔可视化使用supervisor很方便,但是当监控进程达到二位数以上时,每个进程手动一个个启动很费时间。所以建议使用命令行启动和暂停。
supervisor的命令行命令如下
supervisorctl reload
supervisorctl stop all
宝塔下supervisor的安装路径是/www/server/panel/pyenv/bin/supervisorctl
因此以上命令应当修改为
# 查看版本
/www/server/panel/pyenv/bin/supervisord -v
# 重新启动
/www/server/panel/pyenv/bin/supervisorctl reload
# 停止所有进程
/www/server/panel/pyenv/bin/supervisorctl stop all
supervisor event listener监控报警
程序部署后,我们总想知道运行的怎么样,比如:程序异常退出次数多不多,爬虫是不是启动失败等等。使用supervisor event listener可以起到监控报警作用。
supervisor的event listener也是supervisor一个子进程。因此,需要先写一个listener.py监控脚本,然后让supervisor运行该脚本即可。
listener.py的书写方法以后再专门写一篇文章。
写完后,找到supervisor主配置文件,并添加以下内容
[eventlistener:listener]
command=btpython listener.py
process_name=%(program_name)s
numprocs=1
events=PROCESS_STATE
directory=/www/wwwroot/project
autostart=true
autorestart=unexpected
user=root
宝塔环境下使用supervisor
- 安装python项目管理器,安装python3.7.8版本,设置为默认版本
pyenv global 3.7.8
常见问题
- 宝塔下supervisor无法正常启动?
去/www/server/panel/plugin/supervisor/log中查看错误日志 - 明明安装了pytest但是却显示no named module pytest?
这是因为服务器中有多个python版本,pytest的安装目录不在默认版本下,解决方法如下:
使用which pytest找到pytest的命令所在处,然后/root/.pyenv/shims/python3 -m pytest - 远程服务器重装系统后sshkey已变更怎么办?
在本地执行ssh-keygen -R “ip”,其中ip地址更换成远程服务器地址 - linux如何查看进程
https://www.linuxprobe.com/linux-look-process.html
定制宝塔
定制宝塔完全是因为开发期间很多重复性调试和安装工作让人头疼,于是分析了宝塔源代码,并根据自己需要进行了定制修改。估计很多同学应该不需要这一步了,我就不写教程了。如果有需要可以私信联系我。
- 点赞
- 收藏
- 关注作者
评论(0)