Scrapy是专业级T_T爬虫框架,在研究爬虫领域颇负盛名,是当今世界最流行的爬虫框架,没有之一。不过如此强大的爬虫框架,学习成本却比较高,作为一个新手,我对此感同身受,希望我的学习心得,避免大家入坑。

就是这么简单,安装完成。
项目
### 创建项目 通过命令行进入你要放置项目的文件,输入: ` scrapy startproject XXXXX XXXXX代表你项目的名字 `  输入`scrapy genspider zl www.zhaopin.com`就会生成一个爬虫定义字段
打开item.py
,定义一些字段,这些字段可以临时存储数据,以方便后面^.^把数据保存到本地文件、数据库和其他地方。
废话不多说,上代码:
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class ZhilianItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()#职位名称
rate = scrapy.Field()#反馈率
compy = scrapy.Field()#公司
money = scrapy.Field()#月薪
place = scrapy.Field()#工作地点
字段通过`scrapy.Field()`定义,很简单吧��。
编写spider
这是爬虫的核心部分,是不是很紧张,很刺激��。不要怕其实一点都不难(这是小白教程),不多说先看代码,没有代码讲了也会一脸懵逼:
# -*- coding: utf-8 -*-
import scrapy
import re
from bs4 import BeautifulSoup
from scrapy.http import Request
from zhilian.items import ZhilianItem
class ZlSpider(scrapy.Spider):
name = 'zl'
allowed_domains = ['sou.zhaopin.com']
first_url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&sm=0&p='
last_url = '&sg=d5859246414f499ba3fa6c723a9749f5'
def start_requests(self):
for i in range(1,91):
url = self.first_url + str(i) + self.last_url
yield Request(url,self.parse)
def parse(self, response):
soup = BeautifulSoup(response.body.decode('utf-8'),'lxml')
for site in soup.find_all('table',class_='newlist'):
item = ZhilianItem()
try:
item['name'] = site.find('td',class_='zwmc').get_text().strip()
#print(item['name'])
item['rate'] = site.find('td',class_='fk_lv').get_text()
#print(item['rate'])
item['compy'] = site.find('td',class_='gsmc').get_text()
#print(item['compy'])
item['money'] = site.find('td',class_='zwyx').get_text()
#print(item['money'])
item['place'] = site.find('td',class_='gzdd').get_text()
#print(item['place'])
#print(item)
yield item
except:
pass
前面几行都是调用一些包和模块,`re`和`bs4`就不多说了��,`request`是一个单独的request的模块,需要跟进URL的时候,需要用它。`ZhilianItem`是导入的items的`ZhilianItem`类。 我们要遍历所有的职位页面。
对于这些链接,有些人会选择直接把链接贴到start_urls
但是这太蹩脚了(如果你执意这么做也要考虑编程量),看我的方法优雅方便多了吧��。
先赋值了几个变量,定义start_requests
通过requuest
生成response
,调用parse
函数对每个响应进行处理。
使用BeautifulSoup
进行解析,提取元素,将我们导入的item
文件进行实例化,用来存储我们的数据,将需要的数据,复制给item[key] (注意这儿的Key就是我们前面在item文件中定义的那些字段。)(懒癌犯了,写的简单点了��)
存储数据
打开pipelines
文件,定义ZhilianPipeline
类,啥也不说了,再来一波代码~_~:
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
import os
class ZhilianPipeline(object):
def open_spider(self, spider):
path = 'D:/数据/'
if not os.path.exists(path):
os.makedirs(path)
self.file = open(path + '智联招聘.jl', 'wt',encoding='UTF-8')
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
line = json.dumps(dict(item),ensure_ascii=False) + '\n'
self.file.write(line)
return item
导入`json`和`os`模块,定义`open_spider`函数(当spider运行是调用),创建一个json,定义`close_spider`函数(当spider关闭时调用),定义` process_item`函数,把`item`数据写入json中。 在转到`settings.py`输入一下代码:
ITEM_PIPELINES = {
'zhilian.pipelines.ZhilianPipeline': 300,
}
好了,大概就这样了(不懂的可以下面评论问我+_+) ### 运行spider 输入:
scrapy crawl zl
运行爬虫,生成json数据。
over^3^!!!Scrapy虽难,但是只要入门,之后自然就轻松了,加油。