查看解放号的一些Python岗

查看一些解放号的外包数据。

"""
    爬取解放号的数据
"""

# 先搜索,找到我们需要的数据,然后通过开发者工具看看它是从哪里来的
# 首先打开解放号首页,然后搜索python
# 查看第一条
# 发现它的数据来源为:https://www.jfh.com/jfportal/workMarket/getRequestData
# 而且里面有json数据,开始构造url

# 首先是新建文件
import csv
import pprint
import random

import requests
import time
import json

keyword = input('请输入要搜索的关键词:') # 输入关键词进行爬取

#  新建文档
f = open(f'20211102解放号数据-{keyword}.csv', mode='a', encoding='utf-8-sig', newline='')

# csv写入器
csvWriter = csv.DictWriter(f, fieldnames=[
    '标题',
    '编号',
    '类型',
    '投标人数',
    '发布日期',
    '截止日期',
    '状态',
    '价格',
    '详情页',
])
# 写入表头
csvWriter.writeheader()
# 请求头
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36',
}

# 开始多页爬取
for page in range(1, 11):
    time.sleep(random.randint(2,10))
    # 由于请求方式是post的,所以需要参数,这里也是多页爬取的关键
    data = {
        "putTime": "",
        "minPrice": "",
        "maxPrice": "",
        "isRemoteWork": "",
        "orderCondition": "0",
        "orderConfig": "1",
        "pageNo": page, # 页码
        "searchName": str(keyword), # 搜索的关键词
        "fitCode": "0",
        "workStyleCode": "",
        "jfId": "235066803",
        "buId": "",
        "currentBuid": "",
        "jieBaoType": "",
        "login": "1",
        "city": "",
        "orderType": "",
        "serviceTypeKey": "",
        "webSite": "",
        "webSign": "",
        "source": "1",
    }

    # 构造url
    url = 'https://www.jfh.com/jfportal/workMarket/getRequestData' # 这是请求的url,不是所看到的那些网址

    response = requests.get(url=url, headers=headers, data=data)
    # 打印json看是否有需要的数据
    # print(response.json()) #确实有需要的数据,通过分析,数据都存储在resultList里
    # 把数据剔提取出来
    results = response.json()['resultList'] # 至此我们已经取到了数据
    # print(results) # 是个列表,列表中的每个元素都是字典

    for item in results:
        pprint.pprint(item)
        # 构造详情页
        detail_page = f'https://www.jfh.com/jfportal/orders/jf{item["orderNo"]}'

        # 由于可能有些信息是没有截止日期的,所以运行的时候可能会报错,用判定
        # if item['bidValidtime']: # 有数据才进行下一步操作
        # 这里我用try
        try:
            dataNeed = {
                '标题':item['orderName'],
                '编号':item['orderNo'],
                '类型':item['techDirection'],
                '投标人数':item['bookCount'],
                '发布日期':item['formatOrderTime'],
                '截止日期':item['bidValidtime'],
                '状态':item['bidValidTimeOut'],
                '价格':item['planPrice'],
                '详情页':detail_page,
            }
            # 写入到csv文档里
            csvWriter.writerow(dataNeed)
            print(dataNeed)
        except:
            pass # 错误就直接跳过
        print(str(keyword) + '爬取完毕!')

保存后的数据如下:

可视化可以拿价格可视化一下,提高一下自己学习的欲望。

posted @ 2021-11-02 21:01  、一叶孤城  阅读(66)  评论(0编辑  收藏  举报