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(五)
爬取美团网站信息(四)
爬取美团网站信息(三)
爬取美团网站信息(二)
爬取美团网站信息(一)
哔哩哔哩滑动验证码破解