You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.0 KiB

# -*- coding: utf-8 -*-
import scrapy
import json
from scrapy_redis.spiders import RedisSpider
# from tencent.items import TencentItem
from tencent.items import TencentItem
# import requests
#class HrSpider(scrapy.Spider):
class HrSpider(RedisSpider):
name = 'hr'
allowed_domains = ['careers.tencent.com']
one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1592484674932&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'
two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1592484862642&postId={}&language=zh-cn'
start_urls = [one_url.format(1)]
redis_key = "hr"
def parse(self, response):
for page in range(1,15):
# 向这10页来发起请求
url = self.one_url.format(page)
yield scrapy.Request(
url=url,
callback=self.parse_one
)
def parse_one(self,response):
data = json.loads(response.text)
for job in data['Data']['Posts']:
item = TencentItem()
item['zh_name'] = job['RecruitPostName'] # 职位
item['zh_type'] = job['CategoryName'] # 职位类型
item['zh_city'] = job['LocationName']
post_id = job['PostId'] # id
# 拼接详情页的url
detail_url = self.two_url.format(post_id)
yield scrapy.Request(
url=detail_url,
meta={'item':item},
callback=self.parse_two
)
def parse_two(self,response):
# item = response.meta['item']
item = response.meta.get('item')
# print(response.text)
# print(type(response.text))
data = json.loads(response.text)
item['zh_yaoqiu'] = data['Data']['Requirement']
item['zh_duty'] = data['Data']['Responsibility']
item['zh_city'] = data['Data']['LocationName']
# print(item)
yield item