《Python爬蟲精進》14關-出任爬蟲公司CEO

目標:通過職友集,搜索全國上百家招聘網站的最新職位。並將【公司、職位、地址、招聘信息】存儲成csv文件。

網址:https://www.jobui.com/rank/company/

1、輸入創建Scrapy項目的命令:scrapy startproject jobui

在終端輸入命令scrapy startproject jobui後會出現以下結果

終端:

文件夾:

2、在spiders文件夾下新建一個jobui_jobs.py文件

jobui_jobs.py程序

import scrapy
import bs4
from ..items import JobuiItem

class JobuiSpider(scrapy.Spider):
    name = 'jobs'
    allowed_domins = ['https://www.jobui.com']
    start_urls = ['https://www.jobui.com/rank/company/']
    

    def parse(self,response):
        bs = bs4.BeautifulSoup(response.text,'html.parser')
        data_list = bs.find_all('ul',class_="textList flsty cfix")
        for data_1 in data_list:
            a_list = data_1.find_all('a')
            for a in a_list:
                company_id = a['href']
                real_url = 'https://www.jobui.com' + company_id + 'jobs'
                yield scrapy.Request(real_url,callback = self.parse_job)


    def parse_job(self,response):
        bs = bs4.BeautifulSoup(response.text,'html.parser')
        company = bs.find('h1',id='companyH1')['data-companyname']
        datas = bs.find_all('div',class_="job-simple-content")
        for data in datas:
            item = JobuiItem()
            item['company'] = company
            item['position'] = data.find('h3').text
            item['address'] = data.find_all('span')[0].text
            item['detail'] = data.find_all('span')[1].text

            yield item

3、items.py程序

import scrapy

class JobuiItem(scrapy.Item):
    # define the fields for your item here like:
    company = scrapy.Field()
    position = scrapy.Field()
    address = scrapy.Field()
    detail = scrapy.Field()

4、pipelines.py程序

# 存儲爲Excel文件,我們依舊是用openpyxl模塊來實現

# -*- coding: utf-8 -*-

# 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
import openpyxl

class JobuiPipeline(object):
    def __init__(self):
    #初始化函數 當類實例化時這個方法會自啓動
        self.wb = openpyxl.Workbook()   # 創建工作簿
        self.ws = self.wb.active    # 定位活動表
        self.ws.append(['公司','職位','地址','招聘信息',''])


    def process_item(self, item, spider):
    #process_item是默認的處理item的方法,就像parse是默認處理response的方法
        company_datas = [item['company'],item['position'],item['address'],item['detail']]
        self.ws.append(company_datas)
        #把公司名稱、職位名稱、工作地點和招聘要求都寫成列表的形式,賦值給line
        return item

    def close_spider(self,spider):
        self.wb.save('./jobui.xlsx')
        self.wb.close()

5、settings.py程序

BOT_NAME = 'jobui'

SPIDER_MODULES = ['jobui.spiders']
NEWSPIDER_MODULE = 'jobui.spiders'

# USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.3'
ROBOTSTXT_OBEY = False
# 下載延遲0.5秒
DOWNLOAD_DELAY = 0.5

# 存儲成Excel文件的方法要稍微複雜一些,我們需要先在setting.py裏設置啓用ITEM_PIPELINES
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'jobui.pipelines.JobuiPipeline': 300,
}

FEED_URI = './storage/data/%(name)s.csv'
# FEED_URI是導出文件的路徑。'./storage/data/%(name)s.csv',就是把存儲的文件放到與settings.py文件同級的storage文件夾的data子文件夾裏。
FEED_FORMAT = 'CSV'
# FEED_FORMAT 是導出數據格式,寫CSV就能得到CSV格式。
FEED_EXPORT_ENCODING = 'ansi'
# FEED_EXPORT_ENCODING 是導出文件編碼,ansi是一種在windows上的編碼格式

6、在jobui文件夾下添加main.py文件

main.py程序

from scrapy import cmdline
cmdline.execute(['scrapy','crawl','jobs'])

7、運行main.py文件


得到以下表格:


個人說明:

我在學習這一關的過程中,由於進入鏈接後出現的界面以及Elements中各項信息的元素、屬性都與教程中的有區別,因此我原來的程序一直出現各種錯誤,並且一直不能將我爬取的信息下載csv文件中。即使我直接copy教程中的所有程序並且載程序沒報錯的情況下,依然不能得到我所需要的信息,csv文件一直都是隻有表頭【公司、職位、地址、招聘信息】這幾個。

我嘗試了上網查找其他人的答案,但是他們的程序還是不能解決我的問題(其實我也就只看了兩篇博客)。我花了一天時間去搞清楚整個項目,終於最後得到了我想要的以上那個表格。


以下是【教程中的操作】和【我的操作】的區別

原教程中,【公司、職位、地址、招聘信息】這幾個信息的Elements元素、屬性如下所示:

公司:

職位、地址、招聘信息:

以下是教程中【公司、職位、地址、招聘信息】這幾個信息的Elements元素、屬性的總結:

而我找到的【公司、職位、地址、招聘信息】幾個信息的Elements元素、屬性如下所示:

公司:

職位、地址、招聘信息:

以下是我找到的【公司、職位、地址、招聘信息】這幾個信息的Elements元素、屬性的總結:

數據 元素 屬性
公司名稱 h1 id='companyH1'
職位名稱 h3 純文本
工作地點 span(第0個元素) 純文本
招聘要求 span(第1個元素) 純文本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章