这个项目花了近一个月 有点久
主要卡壳在不熟悉云服务器相关操作和免费动态IP池构造上
又是那种“卡住了 不行 一定要搞定 怎么能先跳过呢” 然后就死磕在一个问题上 浪费了不少时间
主要有两个地(坑)方值得说明下 :
京东搜索页对阿里云进行了IP屏蔽
本地能够成功爬取到数据 但放到阿里云调度就没有数据
添加User-Agent、Cookies 依然没有下载到数据
为什么!这不科学!本地都能抓取 云服务器就没有
然后开始贤者时刻三步走:我是谁、我在哪、我要到哪里去
最后定位到问题 IP 找了个免费IP代理上 服务器调度
Boom Shakalaka 完美! 终于有数据了腾讯云就没有被屏蔽 简直神仙打架 影响到凡人的性生活 譬如我 好死不死 我偏偏就买了阿里云 好死不死 我偏偏就想先爬京东的 然后就撞在了一起就成了坑 当然发现定位这个坑 也花了不少时间 为了埋这个坑 结果又挖了动态IP池的坑
动态IP池
网上有很多免费的代理网站 可以获取免费IP github找到大神的动态IP池项目就从一堆代理网站中获取IP 并测试是否可行 当然大多数是没用的 这些免费IP简直就是老弱病残、残花败柳、虾兵蟹将 能打两下就打(它真的就只能打两下) 不能打就扔
实测总计获取的五六百个IP 能用就几个 这还仅仅是能用的 在能用的中连接速度又是慢的一b 经常性timeout
谁让我是平民玩家 氪金玩家还是去买IP包月套餐吧 既稳定又快 也就几百块/月 微笑脸
下面是正经的整个项目过程
1.云服务器配置
2.Scrapy爬虫撸代码
3.ProxyPool动态IP代理池
4.云服务器调度
工具
Pycharm
Xshell
Python 3.6
1.云服务器配置
1.1 配置安全组(阿里云)
购买阿里云/腾讯云/吧啦吧啦云后 首先配置下安全组开端口 需自行添加的的端口有SSH:22、HTTP:80、HTTPS:443、Scrapyd:6800、Flask:5000(可选)、Redis(可选)
阿里云端口
1.2 Xshell连接云服务器(Win下)
开了SSH:22端口后 就可以用Xshell连接 连接输入公网IP 用户身份验证输入云服务器用户名和密码
当然也可以选择其他方法
image.png
image.png
1.3配置服务器环境
在Xshell连接服务器后 搭建相关环境
1) 安装 Java 8
// 查看新系统是否安装java环境$ yum list installed |grep java// 在线查看java的安装包列列表$ yum -y list java*// 安装选择的java版本ram包,我么这⾥里里安装的是 java 1.8$ yum -y install java-1.8.0-openjdk// 安装完成之后,再检查⼀一下 java 版本$ java -version
2) 安装 Python 3
// 安装依赖包$ yum -y groupinstall "Development tools"$ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel// 下载 Python 3.6.2$ wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz// 创建安装目录$ mkdir /usr/local/python3// 安装 gcc$ yum -y install gcc// 安装 Python 3.6.2$ tar -xvJf Python-3.6.2.tar.xz $ cd Python-3.6.2$ ./configure --prefix=/usr/local/python3 $ make && make install// 创建软连$ ln -s /usr/local/python3/bin/python3 /usr/bin/python3 $ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3// 测试 python3$ python3 --version
3) 安装 Python 库
$ pip3 install scrapy $ pip3 install bs4 $ pip3 install pymongo $ pip3 install scrapyd $ pip3 install scrapyd-client
A.Scrapyd 的配置
Scrapyd配置文件
image.png
然后,我们进入下面的路路径, 通过命令 vim default_scrapyd.conf
来编辑这个文件
image.png
默认端口号6800 在前面的[阿里云安全组配置中]已经开放此端口 这里的端口号,必须在安全组里面开放出来,才能访问,否则网页访问 Scrayd 的控制台界面是不行的。
B. 启动Scrapyd
输入命令$ '/usr/local/python3/bin/scrapyd'
或者让 Scrapyd 能够在后台运行,不至于关闭了控制台,程序也关掉了(Xshell下)$ nohup '/usr/local/python3/bin/scrapyd' & 后台运行
在浏览器中输入网址http://XXX.XXX.XX.XXX:6800/
公网IP和端口号 出现如下界面说明scrapyd启动成功
Scrapyd浏览器页面
如果需要关闭,则首先输入指令ps -ef | grep scrapyd
来找到 Scrapy 的进程 ID 是多少,然后再通过命令 kill <进程ID> ,kill 掉进程
4) 安装MongoDB
项目的数据,都是要存储在 MongoDB 上,所以,我们这里需要在云服务器器上安装MongoDB
// 创建mongodb-org-3.6.repo文件,因为我们要用yum装$ touch /etc/yum.repos.d/mongodb-org-3.6.repo// 编辑mongodb-org-3.6.repo文件$ vim /etc/yum.repos.d/mongodb-org-3.6.repo
为 mongodb-org-3.6.repo 文件添加一下内容
[mongodb-org-3.6] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb- org/3.6/x86_64/ gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
修改完成 :wq
保存退出 接着输命令
// 安装 MongoDB$ sudo yum install -y mongodb-org
安装成功后 配置mongdb文件
// 修改/etc/selinux/config$ vim /etc/selinux/config
我们需要把 etc/selinux/config
文件里面的 SELINUX
改为 SELINUX=permissive
继续修改 /etc/mongod.conf
文件
找到下面这句,添加的是内网IP地址 注意是内网IP 地址
net: port: 27017 bindIp: 127.0.0.1, XX.XXX.XXX.XX
然后 wq!
退出,接着回来敲命令
$ chown -R mongod:mongod /var/lib/mongo $ chown -R mongod:mongod /var/log/mongodb $ mkdir /data/db// 启动MongoDB$ sudo service mongod start// 关闭MongoDB$ sudo service mongod stop// 重启MongoDB$ sudo service mongod restart
推荐使用 Robo 3T 这个可视化 MongoDB 的软件查看数据库
安装配置 Robomongo
可以去官网 下载最新程序
配置连接 先在connection菜单中填写内网IP
然后在SSH菜单填写公网IP、账号密码
image.png
这是连接成功后的数据库
image.png
5) 安装Redis(可选)
官网下载
$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz $ tar xzf redis-5.0.0.tar.gz $ cd redis-5.0.0 $ make
修改配置文件redis.conf
protected-mode yes
更改为no
daemonize no
添加进程守护 后台运行 更改为yes
bind 127.0.0.1
更改为0.0.0.0
#requirepass foobared
去掉注释 修改新密码
image.png
image.png
image.png
更改后 启动服务redis-server redis.conf
使用 RedisDesktopManager 这个可视化 Redis的软件查看数据库 记得在服务器安全组开放6379端口
image.png
作者:丨像我这样的人丨
链接:https://www.jianshu.com/p/d70b7fe36646