01
Scrapy的环境搭建
想来能学习 Scrapy 肯定 Python 环境是安装好的,所以就可以直接使用命令
pip install scrapy
这样就可以直接安装 Scrapy 了。太慢的话建议去更换 pip 源,自行百度。安装完成之后输入 scrapy 出现下面的信息则就是安装成功
02
创建一个Scrapy项目
进入你想生成项目的文件目录,使用命令创建一个 Scrapy 项目
scrapy startproject newspider
出现这个信息意味着你的项目已经创建成功。newspider 是项目的名字,可以自己命名。
查看文件夹, 会发现 newspider 这个文件夹,这就是你创建的 Scrapy 爬虫项目了。
Scrapy 爬虫还有好几个不同的类型可以创建,这个后续再说。创建到这里基本就结束,可以直接使用 IDE 工具打开,建议使用 PyCharm 直接打开。
03
项目文件介绍
这是文件目录,下面给大家介绍一下每个文件都是干嘛的。
newspider 文件夹内,有一个 scrapy.cfg 配置文件和 newspider 的文件夹
第一层[一级 newspider目录]:
-scrapy.cfg: 配置文件,不需要修改
-newspider: 文件夹:第二层解释
项目文件目录介绍完毕。
04
简单的爬虫实例
这里我以上次的抓取智联的代码为例,就直接上代码了,按照上面的步骤走下来,运行这个爬虫是完全没问题的。在 spiders 文件夹下新建 zhilianspider.py 文件,名字自己定。
#!/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 文件
# -*- 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
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 协议,具体自己查查。
ROBOTSTXT_OBEY = False
MYSQL_HOST = 'ip'
MYSQL_DBNAME = 'dbname'
MYSQL_USER = 'root'
MYSQL_PASSWD = 'pass'
这是最简单的 settings 修改,修改完成后就可以启动爬虫,开始抓取数据的旅程。输入启动命令
scrapy crawl job_spider
命令输入要和 cfg 文件同级目录。
到这里一个简单的爬虫就配置好了,如果需要别的网站,就需要自己修改初始 URL,以及新的解析响应的 xpath 或者正则匹配自己想要的数据。并修改items,保存数据。
精彩推荐
本文分享自 Python爬虫scrapy 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!