pyspider爬取前程无忧的简单实践

  假如我们有这样有一个需求,统计一下全国Python相关工作的薪酬状况,于是我们选择了去前程无忧这样的网站,主要是这个网站不用注册就能进行检索

看下一个有多少页:

 

我们接下来进行操作一把:

(1)首先去创建一个project,我们直接命名为job

接下来就会出现这样一个页面:

 

 (2)把需要爬取的目标连接填进去

我是直接拷贝的链接,看起来略长

(2)尝试运行一下

 继续点击:

 

 报错了,这是一个安全错误

我们可以直接 添加一个这个:validate_cert=False

保存一下,重新运行(是返回到第一个代码出运行),出现这样一个结果

也就是出现了,574个我们空可以进行进一步爬取的信息,其实这里的多数是没有价值的,因为我们只需要中间部分,我们默认爬取的是凡是含有http的都进行爬取

 

 

 (3)修改选择器

我们直接使用pyspider给我们提供的选择器,按照上面操作即可

重新run一下:

现在只有50个,说明前程无忧给我们默认的是每一页50个岗位

 (4)先将后面的方法置为spss

 重新运行一下:

 已经有了这个页面,假如我们需要提取薪酬

(5)提取薪酬

重新运行一下

OK,可以进行提取

 (6)设置我们需要提取的页数

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }
    def __init__(self):
        self.index=1
        self.url_base1='https://search.51job.com/list/000000,000000,0000,00,9,99,Python,2,'
        self.url_base2='.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
    @every(minutes=24 * 60)
    def on_start(self):
        for index in range(30):
            self.crawl(self.url_base1+str(index)+self.url_base2, callback=self.index_page,validate_cert=False)
            index+=1
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('p > span > a').items():
            self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False)

    @config(priority=2)
    def detail_page(self, response):
        salary=response.doc('.cn > strong').text()
        print salary

运行一下:

得到了我们设定的30页

 (7)将我们需要的数据导成文件

毕竟我们只是进行的print,但是一般来说我们爬虫的目的是为了得到数据,因此我们需要进行导出数据

1)添加路径

self.baseDir = "D:/salary"

2)获取公司名称,以便导出的数据有属性名字

运行一下: 

 

 建立路径:

if not os.path.exists(self.baseDir+"/"+company_name):
            os.makedirs(self.baseDir+"/"+company_name)

3)写入

运行一下,报错:

 

[E 181215 21:21:58 base_handler:203] 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)
    Traceback (most recent call last):
      File "D:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 196, in run_task
        result = self._run_task(task, response)
      File "D:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 176, in _run_task
        return self._run_func(function, response, task)
      File "D:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 155, in _run_func
        ret = function(*arguments[:len(args) - 1])
      File "<job_python>", line 34, in detail_page
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)

 提示说我们的编码错误,那我们设置一下编码

运行一下在,磁盘的目标位置正常也出现了文件

 

 (8)正式进行爬虫

 

显示爬取状态 

 

 

静静等待爬取完成 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值