【爬虫开发】基于项目实战,从开发到部署经验总结

开发过程

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

  1. 修改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
  1. yum安装
    yum -y install google-chrome-stable
    Google官方源可能在中国无法使用,导致安装失败或者在国内无法更新,可以添加以下参数来安装: 
    yum -y install google-chrome-stable --nogpgcheck
  2. 检查chrome版本,安装对应chromedriver
    google-chrome -v

在centOS上安装火狐浏览器

可以直接使用yum安装
yum install firefox

安装Webdriver

  1. ChromeDriver
    淘宝镜像
    官方链接
  2. GeckoDriver适用于火狐浏览器
    Github链接
    Geckodriver与Firefox版本映射表
  3. 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安装

  1. 宝塔下的supervisor安装
    建议使用宝塔的supervisor插件,傻瓜式安装
  2. 非宝塔下的supervisor安装
    pip install supervisor
  3. 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

  1. 安装python项目管理器,安装python3.7.8版本,设置为默认版本
    pyenv global 3.7.8

常见问题

  1. 宝塔下supervisor无法正常启动?
    去/www/server/panel/plugin/supervisor/log中查看错误日志
  2. 明明安装了pytest但是却显示no named module pytest?
    这是因为服务器中有多个python版本,pytest的安装目录不在默认版本下,解决方法如下:
    使用which pytest找到pytest的命令所在处,然后/root/.pyenv/shims/python3 -m pytest
  3. 远程服务器重装系统后sshkey已变更怎么办?
    在本地执行ssh-keygen -R “ip”,其中ip地址更换成远程服务器地址
  4. linux如何查看进程
    https://www.linuxprobe.com/linux-look-process.html

定制宝塔

定制宝塔完全是因为开发期间很多重复性调试和安装工作让人头疼,于是分析了宝塔源代码,并根据自己需要进行了定制修改。估计很多同学应该不需要这一步了,我就不写教程了。如果有需要可以私信联系我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明志刘明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值