如何让Internshala实习爬虫的Flask API向服务器返回全部抓取数据
Internshala实习数据抓取API
本程序用于抓取实习招聘网站Internshala的相关数据,封装为REST API,以JSON格式向本地服务器返回数据。
注:本程序是完整项目的一部分,可独立运行。
原代码问题分析
原程序运行后仅返回1条实习数据,原因如下:
- for循环内部直接执行return语句,第一次遍历到第一条数据就直接终止函数运行,不会处理剩余抓取结果
- 没有定义容器存储所有条目,每次循环都会覆盖上一次的单条数据
修改后的完整代码
import scrapped_intershala from flask import Flask, jsonify import json import requests import webbrowser from bs4 import BeautifulSoup start_link='https://internshala.com' # 抓取页面数据 html_text = requests.get('https://internshala.com/internships/game%20development-internship').text soup = BeautifulSoup(html_text, 'lxml') app = Flask(__name__) @app.route('/') def run(): company_name = soup.find_all('div', class_="heading_4_5 profile") stipend = soup.find_all('span', class_="stipend") location = soup.find_all('a', class_="location_link") start_date = soup.find_all('div', class_="item_body", id="start-date-first") link_to = soup.find_all('div', class_="heading_4_5 profile") # 新增空列表存储所有实习信息 internship_list = [] for name, sal, loc, Sdate, LK in zip(company_name, stipend, location, start_date, link_to): nm = name.text.replace('\n','') dt = Sdate.text.replace('\n','').replace('Immediately','').strip() answer = { 'Company name' : nm, 'Stipend' : sal.text, 'Location': loc.text, 'Date of joining as intern' : dt, 'For more information link for internship': start_link + LK.a['href'] } # 将单条数据追加到列表 internship_list.append(answer) # 循环结束后统一返回所有数据,使用flask自带的jsonify更规范 return jsonify(internship_list) if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=7000)
修改点说明
- 循环外新增空列表
internship_list作为存储所有实习数据的容器 - 删除循环内的return逻辑,每次循环处理完单条数据后追加到列表中
- 循环结束后统一返回整个列表,直接使用Flask内置的
jsonify方法返回标准JSON格式响应,无需手动处理JSON序列化
内容的提问来源于stack exchange,提问作者Shyamansh Sharma
相关产品推荐
相关产品推荐

