查看一些解放号的外包数据。
""" 爬取解放号的数据 """ # 先搜索,找到我们需要的数据,然后通过开发者工具看看它是从哪里来的 # 首先打开解放号首页,然后搜索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) + '爬取完毕!')
保存后的数据如下:
可视化可以拿价格可视化一下,提高一下自己学习的欲望。