32、出任爬虫公司CEO(爬取职友网招聘信息)
生活随笔
收集整理的這篇文章主要介紹了
32、出任爬虫公司CEO(爬取职友网招聘信息)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
職友集,搜索到全國上百家招聘網站的最新職位。 https://www.jobui.com/rank/company/ 打開網址后,你會發(fā)現:這是職友集網站的地區(qū)企業(yè)排行榜,里面含有 本月人氣企業(yè)榜????前10家公司的招聘信息(公司名稱、職位、工作地點和招聘要求) 最佳口碑雇主????前10家公司的招聘信息(公司名稱、職位、工作地點和招聘要求) 最多粉絲企業(yè)榜????前10家公司的招聘信息(公司名稱、職位、工作地點和招聘要求) 最多評論企業(yè)榜????前10家公司的招聘信息(公司名稱、職位、工作地點和招聘要求) 1、創(chuàng)建?職友網?項目?zhiyou 1 D:\USERDATA\python>scrapy startproject zhiyou
2 New Scrapy project 'zhiyou', using template directory 'c:\users\www1707\appdata\local\programs\python\python37\lib\site-packages\scrapy\templates\project', created in:
3 D:\USERDATA\python\zhiyou
4
5 You can start your first spider with:
6 cd zhiyou
7 scrapy genspider example example.com
8
9 D:\USERDATA\python>cd zhiyou
10
11 D:\USERDATA\python\zhiyou> 2、創(chuàng)建爬蟲文件??D:\USERDATA\python\zhiyou\zhiyou\spiders\zhiyou.py 1 import scrapy
2 import bs4
3 import re
4 import requests
5 import math
6 from ..items import ZhiyouItem
7
8 class ZhiyouItemSpider(scrapy.Spider):
9 name = 'zhiyou'
10 allowed_domains = ['www.jobui.com']
11 start_urls = ['https://www.jobui.com/rank/company/']
12
13 def parse(self,response):
14 bs = bs4.BeautifulSoup(response.text,'html.parser')
15 datas = bs.find_all('a',href=re.compile('^/company/'))
16 for data in datas:
17 company_id = data['href']
18 company_url = 'https://www.jobui.com{}jobs/'.format(company_id)
19 yield scrapy.Request(company_url,callback=self.parse_company)
20
21 def parse_company(self,response):
22 bs = bs4.BeautifulSoup(response.text,'html.parser')
23 try:
24 jobs = int(bs.find('p',class_='m-desc').text.split(' ')[1])
25 job_page = math.ceil(jobs / 15) + 1
26 company_url = str(response).split(' ')[1].replace('>','')
27 # for i in range(1,job_page):
28 for i in range(1,2):
29 job_url = '{}p{}'.format(company_url,i)
30 yield scrapy.Request(job_url,callback=self.parse_job)
31 except:
32 pass
33
34 def parse_job(self,response):
35 bs = bs4.BeautifulSoup(response.text,'html.parser')
36 datas = bs.find_all('div',class_='job-simple-content')
37 company_name = bs.find('h1',id='companyH1')['data-companyname']
38 for data in datas:
39 item = ZhiyouItem()
40 item['company'] = company_name
41 item['job'] = data.find('h3').text
42 item['city'] = data.find('span').text
43 item['desc'] = data.find_all('span')[1].text
44 yield item
Scrapy?核心代碼,callback 1 #導入模塊: 2 import scrapy 3 import bs4 4 from ..items import JobuiItem 5 6 7 class JobuiSpider(scrapy.Spider): 8 name = 'jobs' 9 allowed_domains = ['www.jobui.com'] 10 start_urls = ['https://www.jobui.com/rank/company/'] 11 12 #提取公司id標識和構造公司招聘信息的網址: 13 def parse(self, response): 14 #parse是默認處理response的方法 15 bs = bs4.BeautifulSoup(response.text, 'html.parser') 16 ul_list = bs.find_all('ul',class_="textList flsty cfix") 17 for ul in ul_list: 18 a_list = ul.find_all('a') 19 for a in a_list: 20 company_id = a['href'] 21 url = 'https://www.jobui.com{id}jobs' 22 real_url = url.format(id=company_id) 23 yield scrapy.Request(real_url, callback=self.parse_job) 24 #用yield語句把構造好的request對象傳遞給引擎。用scrapy.Request構造request對象。callback參數設置調用parsejob方法。 25 26 27 def parse_job(self, response): 28 #定義新的處理response的方法parse_job(方法的名字可以自己起) 29 bs = bs4.BeautifulSoup(response.text, 'html.parser') 30 #用BeautifulSoup解析response(公司招聘信息的網頁源代碼) 31 company = bs.find(id="companyH1").text 32 #用fin方法提取出公司名稱 33 datas = bs.find_all('li',class_="company-job-list") 34 #用find_all提取<li class_="company-job-list">標簽,里面含有招聘信息的數據 35 for data in datas: 36 #遍歷datas 37 item = JobuiItem() 38 #實例化JobuiItem這個類 39 item['company'] = company 40 #把公司名稱放回JobuiItem類的company屬性里 41 item['position']=data.find('h3').find('a').text 42 #提取出職位名稱,并把這個數據放回JobuiItem類的position屬性里 43 item['address'] = data.find('span',class_="col80").text 44 #提取出工作地點,并把這個數據放回JobuiItem類的address屬性里 45 item['detail'] = data.find('span',class_="col150").text 46 #提取出招聘要求,并把這個數據放回JobuiItem類的detail屬性里 47 yield item 48 #用yield語句把item傳遞給引擎
?
3、編輯settings.py 1 BOT_NAME = 'zhiyou' 2 3 SPIDER_MODULES = ['zhiyou.spiders'] 4 NEWSPIDER_MODULE = 'zhiyou.spiders' 5 6 USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' 7 8 ROBOTSTXT_OBEY = False 9 10 FEED_URI = './s.csv' 11 FEED_FORMAT='CSV' 12 FEED_EXPORT_ENCODING='utf-8-sig' 13 14 DOWNLOAD_DELAY = 0.5 15 16 ITEM_PIPELINES = { 17 'zhiyou.pipelines.ZhiyouPipeline': 300, 18 }?
4、編輯 items.py 1 import scrapy 2 3 class ZhiyouItem(scrapy.Item): 4 company = scrapy.Field() 5 job = scrapy.Field() 6 city = scrapy.Field() 7 desc = scrapy.Field()?
5、編輯pipelines.py? 1 import openpyxl 2 3 class ZhiyouPipeline(object): 4 #定義一個JobuiPipeline類,負責處理item 5 def __init__(self): 6 #初始化函數 當類實例化時這個方法會自啟動 7 self.wb =openpyxl.Workbook() 8 #創(chuàng)建工作薄 9 self.ws = self.wb.active 10 #定位活動表 11 self.ws.append(['公司', '職位', '地址', '招聘信息']) 12 #用append函數往表格添加表頭 13 14 def process_item(self, item, spider): 15 #process_item是默認的處理item的方法,就像parse是默認處理response的方法 16 line = [item['company'], item['job'], item['city'], item['desc']] 17 #把公司名稱、職位名稱、工作地點和招聘要求都寫成列表的形式,賦值給line 18 self.ws.append(line) 19 #用append函數把公司名稱、職位名稱、工作地點和招聘要求的數據都添加進表格 20 return item 21 #將item丟回給引擎,如果后面還有這個item需要經過的itempipeline,引擎會自己調度 22 23 def close_spider(self, spider): 24 #close_spider是當爬蟲結束運行時,這個方法就會執(zhí)行 25 self.wb.save('./s.xlsx') 26 #保存文件 27 self.wb.close() 28 #關閉文件?
6、在D:\USERDATA\python\dangdang?下執(zhí)行命令?scrapy crawl?zhiyou?
Scrapy?核心代碼,callback 1 #導入模塊: 2 import scrapy 3 import bs4 4 from ..items import JobuiItem 5 6 7 class JobuiSpider(scrapy.Spider): 8 name = 'jobs' 9 allowed_domains = ['www.jobui.com'] 10 start_urls = ['https://www.jobui.com/rank/company/'] 11 12 #提取公司id標識和構造公司招聘信息的網址: 13 def parse(self, response): 14 #parse是默認處理response的方法 15 bs = bs4.BeautifulSoup(response.text, 'html.parser') 16 ul_list = bs.find_all('ul',class_="textList flsty cfix") 17 for ul in ul_list: 18 a_list = ul.find_all('a') 19 for a in a_list: 20 company_id = a['href'] 21 url = 'https://www.jobui.com{id}jobs' 22 real_url = url.format(id=company_id) 23 yield scrapy.Request(real_url, callback=self.parse_job) 24 #用yield語句把構造好的request對象傳遞給引擎。用scrapy.Request構造request對象。callback參數設置調用parsejob方法。 25 26 27 def parse_job(self, response): 28 #定義新的處理response的方法parse_job(方法的名字可以自己起) 29 bs = bs4.BeautifulSoup(response.text, 'html.parser') 30 #用BeautifulSoup解析response(公司招聘信息的網頁源代碼) 31 company = bs.find(id="companyH1").text 32 #用fin方法提取出公司名稱 33 datas = bs.find_all('li',class_="company-job-list") 34 #用find_all提取<li class_="company-job-list">標簽,里面含有招聘信息的數據 35 for data in datas: 36 #遍歷datas 37 item = JobuiItem() 38 #實例化JobuiItem這個類 39 item['company'] = company 40 #把公司名稱放回JobuiItem類的company屬性里 41 item['position']=data.find('h3').find('a').text 42 #提取出職位名稱,并把這個數據放回JobuiItem類的position屬性里 43 item['address'] = data.find('span',class_="col80").text 44 #提取出工作地點,并把這個數據放回JobuiItem類的address屬性里 45 item['detail'] = data.find('span',class_="col150").text 46 #提取出招聘要求,并把這個數據放回JobuiItem類的detail屬性里 47 yield item 48 #用yield語句把item傳遞給引擎
?
轉載于:https://www.cnblogs.com/www1707/p/10850692.html
總結
以上是生活随笔為你收集整理的32、出任爬虫公司CEO(爬取职友网招聘信息)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装SQL SERVER 2005后,没
- 下一篇: 软件工程教程:第7章软件维护 课后习题