前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy 爬虫 --- 创建

Scrapy 爬虫 --- 创建

作者头像
andrew_a
发布2019-07-30 15:16:29
5010
发布2019-07-30 15:16:29
举报
文章被收录于专栏:Python爬虫与数据分析
本篇文章是关于 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(

爬取美团网站信息(四)

爬取美团网站信息(三)

爬取美团网站信息(二)

爬取美团网站信息(一)

哔哩哔哩滑动验证码破解

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫scrapy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档