Scrapy学习——爬取智联招聘网站案例

  • 安装scrapy
    • 下载
    • 安装
  • 准备
  • 分析
  • 代码
  • 结果

安装scrapy

如果直接使用pip安装会在安装Twisted报错,所以我们需要手动安装。

下载

安装scrapy需要手动下载TwistedpyOpenSSL
Twisted:https://www.lfd.uci.edu/~gohlke/pythonlibs/
pyOpenSSL:https://pypi.org/simple/pyopenssl/

注:选择与自己python版本一致的安装包

安装

pip install 下载的文件名

准备

创建项目:

scrapy startproject zhaopin

这里是引用

创建爬虫:

scrapy genspider zp zhaopin.com

分析

我们爬取一个网站就得需要分析他的网页源代码
我分析之后发现,可以直接爬取每个城市的每页,他的所有信息都是可以直接在每页的找到,下面就是每个职位的所有信息

通过xpath来获取标签

智联招聘网站需要登陆才能爬取,我使用的是cookie登陆,先登陆之后将cookie复制下来

将cookie复制下来,然后使用复制的cookice进行登陆

代码

zhaopin爬虫文件代码

import scrapy
import re,json
import time
import requests
class ZhaopinSpider(scrapy.Spider):name = 'zhaopin'allowed_domains = ['zhaopin.com']def start_requests(self):cookies = 浏览器上面的cookie复制粘贴在这里self.cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}self.headers = {'User-Agent':"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",}yield scrapy.Request('https://www.zhaopin.com/',callback=self.parse,cookies=self.cookies,headers=self.headers)def parse(self, response):# 自动添加第一次请求的cookiestart_city = 480end_city = 950print("开始爬取")for i in range(start_city,end_city):print("城市ID:",i)url_city = "https://sou.zhaopin.com/?jl={0}".format(i)yield scrapy.Request(url=url_city,callback=self.parse_page,cookies=self.cookies,headers=self.headers)def parse_page(self, response):page = 1next_page = response.xpath("//div[@class='pagination clearfix']//div[@class='pagination__pages']//button[@class='btn soupager__btn soupager__btn--disable']/text()").extract_first()if next_page == "下一页":print("正在爬取1:")yield scrapy.Request(url=response.request.url,callback=self.parse_zp,cookies=self.cookies,headers=self.headers)elif response.xpath("//div[@class='sou-main']//div[@class='sou-main__center clearfix']//div[@class='positionList-hook']//div[@class='page-empty__tips']//span/text()").extract_first() != None:print("未搜索到:",response.request.url)returnelse:print("正在爬取2:")for i in range(2, 40, 1):url_page = response.request.url + "&p={0}".format(page)page += 1yield scrapy.Request(url=url_page,callback=self.parse_zp,cookies=self.cookies,headers=self.headers)def parse_zp(self, response):item = {}list_body = response.xpath("//div[@class='joblist-box__item clearfix']")print("URL:",response.request.url)for body in list_body:#工作名字item['title'] = body.xpath(".//div[@class='iteminfo__line iteminfo__line1']//div[@class='iteminfo__line1__jobname']//span[@class='iteminfo__line1__jobname__name']/text()").extract_first()list_li = body.xpath(".//div[@class='iteminfo__line iteminfo__line2']//ul//li")#学历item['Education'] = list_li[2].xpath("./text()").extract_first()# 工作地点item['job_location'] = list_li[0].xpath("./text()").extract_first()#工作时间item['job_time'] = list_li[1].xpath("./text()").extract_first()#工资money = body.xpath(".//div[@class='iteminfo__line iteminfo__line2']//div[@class='iteminfo__line2__jobdesc']//p/text()").extract_first()item['money'] = money.split()#工作需要info = body.xpath(".//div[@class='iteminfo__line iteminfo__line3']//div[@class='iteminfo__line3__welfare']//div")info_list = []for i in info:info_list.append(i.xpath("./text()").extract_first())item['job_info'] = " ".join(info_list)# #公司名item['Company_name'] = body.xpath("//div[@class='iteminfo__line iteminfo__line1']//div[@class='iteminfo__line1__compname']//span[@class='iteminfo__line1__compname__name']/text()").extract_first()company = body.xpath(".//div[@class='iteminfo__line iteminfo__line2']//div[@class='iteminfo__line2__compdesc']//span")# 公司人数item['company_number'] = company[1].xpath("./text()").extract()# 公司类型item['company_type'] = company[0].xpath("./text()").extract()yield item

先在items写入以下代码

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapy
class RecruitmentItem(scrapy.Item):# 工作名字title = scrapy.Field()# 工资money = scrapy.Field()# 学历Education = scrapy.Field()# 工作描述# job_desc = scrapy.Field()#工作时间job_time = scrapy.Field()#工作需要job_info = scrapy.Field()# 工作地点job_location = scrapy.Field()# 公司名Company_name = scrapy.Field()# 公司类型company_type = scrapy.Field()# 公司人数company_number = scrapy.Field()

pipelines代码

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass RecruitmentPipeline:def process_item(self, item, spider):print(item)with open("智联招聘.txt", "a+", encoding="utf-8") as f: for i in dict(item).items():f.write("".join(i[1])+"\t")f.write("\n")# return itemdef open_spider(self,spider):with open("智联招聘.txt", "w", encoding="utf-8") as f: f.write("工作名\t学历\t工作地点\t工作时间\t工资\t公司名\t企业人数\t企业类型\n")

settings.py

需要在配置文件中放开几个配置

#管道文件
ITEM_PIPELINES = {
‘Recruitment.pipelines.RecruitmentPipeline’: 300,
}
#是否使用自定义的cookies
COOKIES_ENABLED = True
#是否遵循robots.txt规则
ROBOTSTXT_OBEY = False

结果

结语 :scrapy爬虫之爬取智联招聘笔记

Scrapy学习——爬取智联招聘网站案例相关推荐

  1. 克服反爬虫机制爬取智联招聘网站

    一.实验内容 1.爬取网站: 智联招聘网站(https://www.zhaopin.com/) 2.网站的反爬虫机制:     在我频繁爬取智联招聘网站之后,它会出现以下文字(尽管我已经控制了爬虫的爬 ...

  2. 爬取智联招聘网站的手段(scrapy)

    首先www.zhaopin.com是智联招聘网站的首页,进行搜索后,比如搜Java,点右键查看网页源代码可以看到,网页里面搜到的内容是异步加载的如图所示: 然后点击f12打开开发者工具,如图: 再点击 ...

  3. Python爬虫 scrapy框架 爬取智联招聘,并把数据存入数据库,存为json格式的数据

    First:创建项目:执行下面三句命令: 1. scrapy startproject zhilianzhaopin2. cd zhilianzhaopin3.scrapy genspider zhi ...

  4. python 爬虫学习:抓取智联招聘网站职位信息(二)

    在第一篇文章(python 爬虫学习:抓取智联招聘网站职位信息(一))中,我们介绍了爬取智联招聘网站上基于岗位关键字,及地区进行搜索的岗位信息,并对爬取到的岗位工资数据进行统计并生成直方图展示:同时进 ...

  5. 爬取智联招聘信息并存储

    #-*- coding: utf-8 -*- import urllib.request import os,time from bs4 import BeautifulSoup #爬取智联招聘网站的 ...

  6. selenium+PyQuery+chrome headless 爬取智联招聘求职信息

    最近导师让自己摸索摸索Python爬虫,好了就开始一发不可收拾的地步.正巧又碰到有位同学需要一些求职信息对求职信息进行数据分析,本着练练手的目的写了用Python爬取智联招聘网站的信息.这一爬取不得了 ...

  7. scrapy爬取智联招聘

    我想分析下互联网行业全国招聘实习生的情况,通过爬取智联招聘,得到15467条数据,并导入Mysql 在items.py里: import scrapy from scrapy.http import ...

  8. 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...

  9. 通过ajax接口爬取智联招聘

    上次分析了抓取智联招聘网站遇到的坑,最后使用selenium模拟的方法抓取到了智联的招聘数据,但是我发现通过分析智联招聘的ajax接口,模拟ajax请求直接获取json数据这种方法更简单. 分析网页a ...

最新文章

  1. 列表自定义的Type和BaseType参考
  2. HDU2032 杨辉三角
  3. 澎湃新闻产品总监首度分享,如何快速在新闻类APP中异军突围?一年时间进入前4名...
  4. linux 基本指令
  5. Angular实现悬浮球组件
  6. 华为云GaussDB(for openGauss)推出重磅内核新特性
  7. 【专栏精选】Assetbundle入门
  8. gitlab工作流程简介
  9. js中的异步与同步,解决由异步引起的问题
  10. 计算机字长与下列哪项指标密切相关,组成原理与汇编语言-中国大学mooc-题库零氪...
  11. php 字符串操作函数
  12. 数领科技|做工业设计可能会用到哪些软件?
  13. shell脚本大全-个人收藏
  14. Go 依赖注入库dig
  15. android 工具 拓扑图,GitHub - AndroidHelper/graph.editor: HTML5拓扑图编辑器
  16. Java使用正则表达式从字符串中提取 IP 地址
  17. 前端十五道html面试题
  18. 阿尔茨海默病de饮食-微生物-脑轴
  19. Springcloud入门第二篇
  20. 怎样用 Python数据 写一个自动交易的股票程序接口?

热门文章

  1. open***用户验证(转自badb0y)
  2. 360年会三娘逆袭 女程序员戴假发化妆成-搜狐滚动
  3. 低延时应用 服务器TurboBoost不可得兼?
  4. 清华大学的同学,究竟有多难?
  5. Photoshop-颜色的调整
  6. 减盐不减味,乌江榨菜掀起轻盐升级革命
  7. 云和恩墨亮相CNCC 2020,zCloud打造国产时代数据库管理中台
  8. nth_element(C++)
  9. 清华大学赵明国:AI芯片 +机器人,突破算法瓶颈
  10. php写html就错误500,php – 简单的html dom解析器返回错误500