爬虫框架Scrapy

一、安装

1、Python2.7

Linux默认都有Python,但若是2.6版本,则需要升级到2.7,升级到2.7需要以下步骤:
首先下载源tar包,可利用linux自带下载工具wget下载,如下所示:
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
下载完成后到下载目录下,解压;

tar -zxvf Python-2.7.3.tar.bz2

进入解压缩后的文件夹 cd Python-2.7.3
在编译前先在/usr/local建一个文件夹python27(作为python的安装路径,以免覆盖老的版本)

mkdir /usr/local/python27

在解压缩后的目录下编译安装

./configure –prefix=/usr/local/python27


make


make install

此时没有覆盖老版本,再将原来/usr/bin/python链接改为别的名字

mv /usr/bin/python /usr/bin/python_old

再建立新版本python的链接

ln -s /usr/local/python27/bin/python2.7 /usr/bin/python

这个时候输入 python
就会显示出python的新版本信息
Python 2.7.3 (default, Sep 29 2013, 11:05:02)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
此时,Python升级成功。

2、安装anaconda2

anaconda可以看做Python的一个集成安装,安装它后就默认安装了python、IPython、集成开发环境Spyder和众多的包和模块,非常方便。Python2对应anaconda2,Python3对应anaconda3。
下载安装文件Anaconda2-4.2.0-Linux-x86_64.sh,然后执行 bash Anaconda2-4.2.0-Linux-x86_64.sh,后面接着傻瓜式的安装。
执行命令conda list 成功显示packages则安装成功。

3、安装scrapy

直接执行pip install scrapy即可。

二、使用

1、新建scrapy项目(本例子中将爬取智联招聘网上的招聘信息,存到json文件及MySQL)

爬取网址为http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3%2B%E6%88%90%E9%83%BD&kw=%E5%A4%A7%E6%95%B0%E6%8D%AE&sm=0&p=1

scrapy startproject zhaopin

这里写图片描述

scrapy.cfg: 项目的配置文件
zhaopin/: 该项目的python模块。之后您将在此加入代码。
zhaopin/items.py: 项目中的item文件.
zhaopin/pipelines.py: 项目中的pipelines文件.
zhaopin/settings.py: 项目的设置文件.
zhaopin/spiders/: 放置spider代码的目录.



编写item:

import scrapy
class ZhaopinItem(scrapy.Item):
    # define the fields for your item here like:
    #职位
    dowhat = scrapy.Field()
    #公司
    company = scrapy.Field()
    #职位月薪
    money = scrapy.Field()
    #工作地点
    adress = scrapy.Field()
    #发布日期
    publishdate = scrapy.Field()
    #工作性质
    #category = scrapy.Field()
    #工作经验
   # experience = scrapy.Field()
    #最低学历
    #need = scrapy.Field()
    #职位类别
    #level = scrapy.Field()
    pass
 ```


 编写spider
 ```python
 # -*- coding: utf-8 -*-
import scrapy
from zhaopin.items import ZhaopinItem
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

class MySpider(scrapy.Spider):
    #设置name
    name = "MySpider"
    #设定域名
    allowed_domains = ["zhaopin.com"]
    #填写爬取地址
    start_urls = ["http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3%2B%E6%88%90%E9%83%BD&kw=%E5%A4%A7%E6%95%B0%E6%8D%AE&sm=0&p=1"]
    #编写爬取方法
    def parse(self, response):
        #实例一个容器保存爬取的信息
        item = ZhaopinItem()
        #这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定
        #先获取每个课程的div
        for box in response.xpath('//table[@class="newlist"]/tr[1]'):
            #获取职位
            item['dowhat'] = box.xpath('.//td[@class="zwmc"]/div/a').xpath('string(.)').extract()
            #获取公司名
            item['company'] = box.xpath('.//td[@class="gsmc"]/a/text()').extract()
            #获取money
            item['money'] = box.xpath('.//td[@class="zwyx"]/text()').extract()
            #获取adress
            item['adress'] = box.xpath('.//td[@class="gzdd"]/text()').extract()
            #获取publishdate
            item['publishdate'] = box.xpath('.//td[@class="gxsj"]/span/text()').extract()
            #返回信息
            yield item
        #url跟进开始
        #获取下一页的url信息
        url = response.xpath("//a[@class='next-page']/@href").extract()
        print(url)
        if url :
            #将信息组合成下一页的url
            page = url[0]
            #返回url
            yield scrapy.Request(page, callback=self.parse)
        #url跟进结束


写到json文件


from scrapy.exceptions import DropItem
import json

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )


class MyPipeline(object):
    def __init__(self):
        #打开文件
        self.file = open('data.json', 'w')
    #该方法用于处理数据
    def process_item(self, item, spider):
        #读取item中的数据
        line = json.dumps(dict(item), ensure_ascii=False) + "\n"
        #print(line) 
        #写入文件
        self.file.write(line)
        #返回item
        return item
    #该方法在spider被开启时被调用。
    def open_spider(self, spider):
        pass
    #该方法在spider被关闭时被调用。
    def close_spider(self, spider):
        pass

写到MySQL


import sys
reload(sys)
sys.setdefaultencoding('utf8')
import MySQLdb

class MySQLPipeline(object):
        def __init__(self):
                self.conn = MySQLdb.connect(host="192.168.1.102",user="root",passwd="root",db="spider",charset="utf8")
                self.cursor = self.conn.cursor()
        def process_item(self, item, spider):
                sql = "insert ignore into zhaopininfo(dowhat, company, money, adress, publishdate) values(%s, %s, %s, %s, %s)"
                param = (item['dowhat'], item['company'], item['money'], item['adress'], item['publishdate'])
                self.cursor.execute(sql,param)
                self.conn.commit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值