pyspider的搭建及爬取时遇到的坑

来源:互联网 发布:mac如何设置语言 编辑:程序博客网 时间:2024/06/16 18:11

pyspider时基于python写的一款爬虫框架,在window部署时会遇到一些莫名的错误,因此我是在Linux系统安装并且使用的。我使用的是腾讯云服务器上使用的。

安装Python、pyspider(要懂一些Linux命令和vim操作)

1、 搭建环境准备(第一次在服务器上运行这些命令时速度较慢,第二次执行会在最后出现nothing do的提示)
① Yum更新
yum update –y
更新centOS系统和其包(为什么不使用yum –y update? 答:环境搭建不需要更新操作系统和软件设置)。
② 安装开发编译工具
yum install gcc gcc-c++ -y
(安装的GUN编译器,安装包名要全名,例如:将gcc-c++打成-c++会出现yum.cli:Config Error。错误)。
③ 安装依赖库

yum install python-pip python-devel python-distribute libxml2 libxml2-devel python-lxml libxslt libxslt-devel openssl openssl-devel –y

④ 升级pip
(升级目的是为了部署的稳定性和功能是实现)

2、部署数据库mariadb (centOS 7中将MySQL从默认的程序列表中移除,我们可以用mariadb代替,他可以完全执行MySQL的执行命令,很好的兼容MySQL)
①安装mariadb数据库
yum install mariadb-server mariadb –y 执行命令后,看到complete!说明安装完成
注:如果想删除云端数据库,执行 yum remove mariadbyum remove mysql
②启动 mariadb服务(会有2秒的停顿)
③设置root密码(默认的账号为root 默认的密码为空,密码也可以不设置)
可以使用mysqladmin -u root password "param"来设置你的数据库密码,其中param为你要设置的密码。

3、安装pyspider
step 1:安装pip

sudo apt-get install python-pip

step 2:安装Phantomjs

sudo apt-get install phantomjs

step 3:安装Pyspider
根据官方文档,在在安装pyspider之前,你需要安装以下类库

sudo apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml

安装过程完成之后,运行

sudo pyspider all

浏览器输入 http:域名://5000有这种界面就说明登入成功
这里写图片描述

在这推荐下:在学习时先去
pyspider官网
pyspider中文网
学习手册,看看官方文档,对于它的使用网上有很多教程,在这我讲下我在爬虫时,遇到的一些坑
1、存入数据库的格式不对(默认是二进制数据)
解决:在脚本语言中写入

def on_result(self, result):        if not result:            return        self.sql.replace(**item) 

这里是将数据写入数据库的格式改变了(将return的数据)

2、对于网页的返回的不同的数据
①返回json格式
解决:通过对其字符串的截取,重新获取其URL地址
②在前端调用其前端的js
解决:在脚本自己写一个类,如同的js方法
③有渲染页面,无法加载
解决:在crawl函数中添加fetch_type=”js”函数
④URL地址正确,而crawl函数却无法抓取页面
解决:首先,你要对http请求有一定了解
通过设置self.methon、self.header、self.data、self.param等函数模仿其页面请求
⑤数据从一个函数传入其他函数
解决:pyspider在crawl函数中提供了save函数,提供这功能
⑥对于同样的URL处理
解决:重写其get_taskid方法,如下

 def get_taskid(self, task):         return md5string(task['url']+json.dumps(task['fetch'].get('data', '')))    

⑦对于有时间戳、token(移动端)
解决:首先使用fiddler抓取其请求,然后获取当前的时间,将其用户信息及当前时间发送给服务器,以保证其请求时最新的,验证通过

原创粉丝点击