Scrapy 爬虫 --- 创建

2019-07-30 15:16:29 浏览数 (1)

本篇文章是关于 Scrapy 爬虫的创建

01

Scrapy的环境搭建

想来能学习 Scrapy 肯定 Python 环境是安装好的,所以就可以直接使用命令

代码语言:javascript复制
pip install scrapy

这样就可以直接安装 Scrapy 了。太慢的话建议去更换 pip 源,自行百度。安装完成之后输入 scrapy 出现下面的信息则就是安装成功

02

创建一个Scrapy项目

进入你想生成项目的文件目录,使用命令创建一个 Scrapy 项目

代码语言:javascript复制
scrapy startproject newspider

出现这个信息意味着你的项目已经创建成功。newspider 是项目的名字,可以自己命名。

查看文件夹, 会发现 newspider 这个文件夹,这就是你创建的 Scrapy 爬虫项目了。

Scrapy 爬虫还有好几个不同的类型可以创建,这个后续再说。创建到这里基本就结束,可以直接使用 IDE 工具打开,建议使用 PyCharm 直接打开。

03

项目文件介绍

这是文件目录,下面给大家介绍一下每个文件都是干嘛的。

newspider 文件夹内,有一个 scrapy.cfg 配置文件和 newspider 的文件夹

代码语言:javascript复制
第一层[一级 newspider目录]:
  -scrapy.cfg: 配置文件,不需要修改
  -newspider: 文件夹:第二层解释
代码语言:javascript复制
代码语言:javascript复制

项目文件目录介绍完毕。

04

简单的爬虫实例

这里我以上次的抓取智联的代码为例,就直接上代码了,按照上面的步骤走下来,运行这个爬虫是完全没问题的。在 spiders 文件夹下新建 zhilianspider.py 文件,名字自己定。

代码语言:javascript复制
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# @Time : 2019/4/29 16:11 
# @Author : zhao.jia
# @Site :  
# @File : zhilianspider.py 
# @Software: PyCharm

import scrapy
import json
from spider_work.items import ZhaopingItem
import re


class ZhaopinSpider(scrapy.Spider):
    # 爬虫的名字,以此来启动爬虫
    name = 'job_spider'
    # 起始URL,
    baseUrl = 'https://fe-api.zhaopin.com/c/i/sou?start={0}&pageSize=90&cityId=489&kw={1}&kt=3'

    offset = 0  # 偏移量

    def start_requests(self):
        # 打开关键词的json文件
        with open('keywords.json', 'r', encoding='utf8') as f:
            keywords_list = json.load(f)

        start_urls = []

        for item in keywords_list:
            for key, value in item.items():
                for job_key in value:
                    print(job_key)
                    start_urls.append(self.baseUrl.format(str(self.offset), job_key))

        if start_urls is not None:
            for url in start_urls:
                print("start_url:", url)
                yield scrapy.Request(url=url, callback=self.parse, meta={'start_url': url})

    def parse(self, response):
        '''
        页面解析函数
        :param response:
        :return:
        '''
        try:
            data_list = json.loads(response.body)['data']['results']

            if len(data_list) == 0:
                return
            for data in data_list:
                item = ZhaopingItem()
                item["jobType"] = data['jobType']['display']  # 职位所属种类
                item["jobName"] = data['jobName']  # 职位名称
                item["emplType"] = data['emplType']  # 工作类型(兼职、全职)
                item["eduLevel"] = data['eduLevel']['name']  # 学历要求
                item["companyName"] = data['company']['name']  # 公司名称
                item["salary"] = data['salary']  # 薪资
                item["welfare"] = ','.join(data['welfare'])  # 员工福利
                item["city"] = data['city']['display']  # 工作城市
                item["workingExp"] = data['workingExp']['name']  # 工作经验
                # item['infoComLink']=data['company']['url']     #公司详情连接
                # item['positionUrl']=data['positionURL']        # 职位详情链接

                yield item
        except Exception as e:
            print(e)
        try:
            init_url = response.meta['start_url']
            self.offset  = 90
            str_offset = str(self.offset)
            pattern = 'start=(.*?)&'
            replace_str = 'start='   str_offset   '&'
            url = re.sub(pattern=pattern, repl=replace_str, string=init_url)
            yield scrapy.Request(url=url, callback=self.parse)
        except Exception as e:
            print(e)

接下来就是 增加自己的 item ,打开 items.py 文件

代码语言:javascript复制
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class ZhaopingItem(scrapy.Item):

    jobType = scrapy.Field()  # 工作种类(大类:互联网、金融……)
    jobName = scrapy.Field()  # 职位名称
    emplType = scrapy.Field()  # 工作类型(全职、兼职)
    eduLevel = scrapy.Field()  # 学历要求
    companyName = scrapy.Field()  # 公司名称
    salary = scrapy.Field()  # 工资
    welfare = scrapy.Field()  # 福利
    city = scrapy.Field()  # 城市
    workingExp = scrapy.Field()  # 要求
    # infoComLink = scrapy.Field()  # 公司详情连接
    # positionUrl=scrapy.Field() # 职位详情链接

如需其他字段,可根据自己的需要修改或添加。

配置管道文件 pipelines.py

代码语言:javascript复制
class SpiderWorkPipeline(object):

    """
    存储数据
    """
    pass
    # def __init__(self):
    #     # 连接数据库
    #     self.connect = pymysql.connect(
    #         host=MYSQL_HOST,
    #         db=MYSQL_DBNAME,
    #         user=MYSQL_USER,
    #         passwd=MYSQL_PASSWD,
    #         # charset='utf8',
    #         use_unicode=True)
    #
    #     # 通过cursor执行增删查改
    #     self.cursor = self.connect.cursor()

插入语句需要自己写,不会的可以百度,也可以保存到 mongodb 。

最后的 settings.py 文件了。修改下面的参数

默认值 TRUE 遵守 robots 协议,具体自己查查。

代码语言:javascript复制
ROBOTSTXT_OBEY = False
代码语言:javascript复制
MYSQL_HOST = 'ip'
MYSQL_DBNAME = 'dbname'
MYSQL_USER = 'root'
MYSQL_PASSWD = 'pass'

这是最简单的 settings 修改,修改完成后就可以启动爬虫,开始抓取数据的旅程。输入启动命令

代码语言:javascript复制
scrapy crawl job_spider

命令输入要和 cfg 文件同级目录。

到这里一个简单的爬虫就配置好了,如果需要别的网站,就需要自己修改初始 URL,以及新的解析响应的 xpath 或者正则匹配自己想要的数据。并修改items,保存数据。

精彩推荐

破解美团加密参数_token(五)

爬取美团网站信息(四)

爬取美团网站信息(三)

爬取美团网站信息(二)

爬取美团网站信息(一)

哔哩哔哩滑动验证码破解

0 人点赞