scrapy使用之爬取智聯招聘
23375 ワード
智聯招聘は動的にファイルをロードしてデータを取得するので、最初に解析したurlはホームページのアドレスではなく、jsonファイルで、jsonファイルを探す方法です.各仕事の具体的なウェブサイトを見ることで法則を知る.https://job.zhaopin.com/XXXXX.htmで、XXXXはjsonファイルのnumberに対応する値です.手順: jsonファイルを解析し、すべてのnumberに対応する値 を得る.新しいウェブサイト をパッチで入手はウェブサイトに入って、自分の欲しい内容を得てウェブサイトに入って、自分の欲しい内容のソースコードを得ます:
得られたデータをcsvファイルに保存する:items.py
pipeline.pyファイル
setting.py
main.py:プログラムエントリ
問題があれば、すぐに指定してください.ありがとうございます.
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
import json
from JobScrapy.items import Job
class ZhilianSpider(scrapy.Spider):
name = 'zhilian'
#allowed_domains = ['www.zhaopin.com']
#start_urls = ['https://jobs.zhaopin.com/156244110251133.htm']
start_urls = ['https://fe-api.zhaopin.com/c/i/sou?start=0&pageSize=60&cityId=489&industry=10100']
def parse(self,response):
js=json.loads(response.body)
#print(js['data'])
res=js['data']['results']
for i in res:
num=i['number']
# https: // jobs.zhaopin.com / CZ486770730J00164642602.htm
url='https://jobs.zhaopin.com/'+str(num)+'.htm'
yield Request(url=url, callback=self.parse_job)
for i in range(1,2):
url='https://fe-api.zhaopin.com/c/i/sou?start='+str(i*60)+'0&pageSize=60&cityId=489&industry=10100'
yield Request(url=url,callback=self.parse)
def parse_job(self, response):
#print(response.text)
job_name=response.css('.l.info-h3::text').extract_first('')
salary=response.css('.l.info-money strong::text').extract_first('')
company=response.css('.company.l a::text').extract_first('')
address=response.css('.info-three.l span a::text').extract_first('')
all=response.css('.info-three.l span::text').extract()
expericnce=all[0]
gradute=all[1]
num=all[2]
# light=response.css('.pos-info-tit').extract()
position=response.css('.pos-ul p::text').extract()
if position==[]:
position=response.css('.pos-ul p span::text').extract()
address_extract=response.css('.add-txt::text').extract_first('')
company_intro=response.css('.intro-content::text').extract()
company_area=response.css('.promulgator-ul.cl li strong a::text').extract_first('')
company_type=response.css('.promulgator-ul.cl li strong::text').extract()
# print(' ',job_name)
# print(' ',salary)
# print(' ',company)
# print(' ',gradute)
# print(' ',address)
# print(' ',company_type)
# print(' ',str(position))
# print(' ',address_extract)
# print(' ',str(company_intro))
# print(' ',company_area)
job=Job()
job['job_name']=job_name
job['salary']=salary
job['company'] =company
job['address'] =address
job['expericnce'] =expericnce
job['gradute'] =gradute
job['num'] = num
job['position'] =position
job['address_extract'] =address_extract
job['company_intro'] =company_intro
job['company_area'] =company_area
job['company_type'] =company_type
yield job
得られたデータをcsvファイルに保存する:items.py
class Job(scrapy.Item):
job_name = scrapy.Field()
salary = scrapy.Field()
company = scrapy.Field()
address = scrapy.Field()
position=scrapy.Field()
address_extract = scrapy.Field()
company_intro = scrapy.Field()
company_area = scrapy.Field()
company_type =scrapy.Field()
expericnce=scrapy.Field()
gradute=scrapy.Field()
num=scrapy.Field()
pipeline.pyファイル
class Pipeline_ToCSV(object):
def __init__(self):
# csv ,
store_file = os.path.dirname(__file__) + '/spiders/job.csv'
# ( )
self.file = open(store_file, 'w+',newline='')
# csv
self.writer = csv.writer(self.file)
def process_item(self, item, spider):
self.writer.writerow((item['job_name'],item['salary'],item['company'],item['address'],item['position'],item['address_extract'],item['company_intro'],item['company_area'],item['company_type'],item['expericnce'],item['gradute'],item['num']))
return item
def close_spider(self, spider):
#
self.file.close()
setting.py
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
'JobScrapy.pipelines.JobscrapyPipeline': 300,
'JobScrapy.pipelines.Pipeline_ToCSV':100
}
main.py:プログラムエントリ
import os
import sys
from scrapy.cmdline `import` execute
data=os.path.abspath(__file__)#
dir_file=os.path.dirname(data)#
sys.path.append(dir_file)
execute(['scrapy','crawl','zhilian'])
問題があれば、すぐに指定してください.ありがとうございます.