scrapy爬取python职位

  • 使用scrapy框架爬取前程无忧上的python职位
  1. 创建cmd文件:star.cmd
scrapy startproject Jobs
cd Jobs
scrapy genspider Job51Spider www.51job.com
  1. 使用编译器打开Jobs开始项目
  • 打开/spiders/Job51Spider.py 写入
# -*- coding: utf-8 -*-
import json
import re
import time

from scrapy import Spider, Request
import requests

from Jobs.items import Job51Item

class Job51spiderSpider(Spider):
    name = 'Job51Spider'
    allowed_domains = ['www.51job.com']
    start_urls = ['http://www.51job.com/']

    # 配置搜索城市, 和搜索关键字
    kw = 'python'
    sou_url = 'https://search.51job.com/list/{city_code},000000,0000,00,9,99,{kw},2,1.html'
    # 城市编号js
    city_codings_url = 'https://js.51jobcdn.com/in/js/2016/layer/area_array_c.js?20180319'

    def start_requests(self):
        # 获取循环城市
        cities = self.get_url_citycods()
        forcity = list(cities)[:2]  # 这里切割前两个城市
        for city in forcity:
            yield Request(
                self.sou_url.format(city_code=cities[city], kw=self.kw),
                callback=self.parse_jobs,
                meta={'city': city}
            )

    def parse_jobs(self, response):
        city = response.meta['city']
        els = response.css('.dw_table .el')[1:]
        # import ipdb; ipdb.set_trace()
        for el in els:
            item = Job51Item()
            item['soucity'] = city
            item['pname'] = el.css('span a::text').extract_first().strip()
            item['purl'] = el.css('span a::attr(href)').extract_first().strip()
            item['cname'] = el.css('span.t2 a::text').extract_first().strip()
            item['curl'] = el.css('span.t2 a::attr(href)').extract_first().strip()
            item['address'] = el.css('span.t3::text').extract_first().strip()
            item['pay'] = el.css('span.t4::text').extract_first()
            item['retime'] = el.css('span.t5::text').extract_first().strip()
            yield item

        next_page = response.css('.bk a::text')[-1].extract().strip()
        # import ipdb;ipdb.set_trace()
        if next_page == '下一页':
            next_url = response.css('.bk a::attr(href)')[-1].extract().strip()
            yield Request(url=next_url, callback=self.parse_jobs, dont_filter=True, meta={'city': city})

    # 获取城市编号
    def get_url_citycods(self):
        area_text = requests.get(self.city_codings_url).text
        ss = re.search('(\{.*\}).*?', area_text, re.S)
        st = ss.group()
        st_dict = json.loads(st)
        # 键值调换
        in_dict = {}
        # for k in st_dict:
        #     in_dict[st_dict[k]] = k
        # with open('data.json', 'wt', encoding='utf-8') as fs:
        #     json.dump(in_dict, fs, indent=4, ensure_ascii=False)
        # # 获取主要城市
        in_dict.clear()
        for k in st_dict:
            if k.find('0000') not in [-1]:
                in_dict[st_dict[k]] = k
        with open('city_big.json', 'wt', encoding='utf-8') as fs:
            json.dump(in_dict, fs, indent=4, ensure_ascii=False)
        return in_dict

    def parse(self, response):
        pass 
  • 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

from scrapy import Item, Field

class Job51Item(Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    soucity = Field()
    # 职位名
    pname = Field()
    # 职位地址
    purl = Field()
    # 公司名
    cname = Field()
    # 公司地址
    curl = Field()
    # 工作地点
    address = Field()
    # 工资
    pay = Field()
    # 发布时间
    retime = Field()
    
  • pipelines.py 中存入mongodb
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
from pymongo import MongoClient

class Job51Pipeline(object):

    job51s = 'job51'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
                mongo_uri = crawler.settings.get('MONGO_URI'),
                mongo_db = crawler.settings.get('MONGO_DB')
            )

    def open_spider(self, spider):
        self.client = MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.job51s].insert_one(dict(item))
        return item 
  • setttings.py 中配置, 最后即可
FEED_EXPORT_ENCODING = 'utf-8'
MONGO_URI = 'localhost'
MONGO_DB = 'jobsconnection'

==仅供参考学习==

原文地址:https://www.cnblogs.com/yymor/p/10243495.html

时间: 2024-10-28 10:46:52

scrapy爬取python职位的相关文章

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

小说免费看!python爬虫框架scrapy 爬取纵横网

前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 准备 python3 scrapy 项目创建: cmd命令行切换到工作目录创建scrapy项目 两条命令 scarpy startproject与scrapy genspider 然后用pycharm打开项目 D:\pythonwork>scra

python scrapy爬取皇冠体育源码下载网站数据二(scrapy使用详细介绍)

1.scrapy工程创建皇冠体育源码下载论坛:haozbbs.com Q1446595067 在命令行输入如下命令,创建一个使用scrapy框架的工程 scrapy startproject scrapyDemo 1 命令创建好后的工程结构如下图scrapy工程结构 输入如下命令,在工程目录中创建示例代码 PS C:\ProjectPycharm> cd scrapyDemoPS C:\ProjectPycharm\scrapyDemo> scrapy genspider example ex

scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visual studio一劳永逸,如果报错缺少前置依赖,就先安装依赖) 本篇主要对scrapy生成爬虫项目做一个基本的介绍 tips:在任意目录打开cmd的方式可以使用下面这两种方式 shift + 右键打开cmd(window10的powershell你可以简单理解为cmd升级版) 在路径框直接输入cmd

Scrapy爬取美女图片 (原创)

有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用python爬取慕课网的视频,是根据爬虫的机制,自己手工定制的,感觉没有那么高大上,所以我最近玩了玩 python中强大的爬虫框架Scrapy. Scrapy是一个用 Python 写的 Crawler Framework ,简单轻巧,并且非常方便.Scrapy 使用 Twisted 这个异步网络库来处理

Scrapy爬取美女图片续集 (原创)

上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scrapy官方文档的过程中,发现Scrapy自身实现了图片和文件的下载功能,不需要咱们之前自己实现图片的下载(不过原理都一样). 在官方文档中,我们可以看到下面一些话:Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines .

Scrapy爬取美女图片第三集 代理ip(上) (原创)

首先说一声,让大家久等了.本来打算520那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复了一些bug(现在肯定有人会说果然是单身狗). 好了,废话不多说,咱们进入今天的主题.上两篇 Scrapy爬取美女图片 的文章,咱们讲解了scrapy的用法.可是就在最近,有热心的朋友对我说之前的程序无法爬取到图片,我猜应该是煎蛋网加入了反爬虫机制.所以今天讲解的就是突破反爬虫机制的上篇 代理

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有