博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据采集与融合技术 作业2

Posted on 2024-10-26 14:24  Bluemming  阅读(4)  评论(0编辑  收藏  举报

Gitee地址链接:https://gitee.com/Bluemingiu/project/tree/master/2

作业①

要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。

(1) 实验过程

核心代码:

使用 requests 库发送 HTTP 请求,并用 BeautifulSoup 解析 HTML 内容,以提取天气预报信息。

for city, url in cities.items():
   response = requests.get(url)
   print(f"正在爬取: {city} ({url}) - 状态码: {response.status_code}")  # 打印状态码
   if response.status_code == 200:
       response.encoding = response.apparent_encoding  # 设置正确的编码
       soup = BeautifulSoup(response.text, 'html.parser')
       forecasts = soup.find_all('ul', class_='t clearfix')

数据插入数据库:

INSERT INTO weather (city, date, weather, temperature) VALUES (?, ?, ?, ?)
''', (city, date, weather, temperature))

输出结果:

数据库查询结果:

(2) 心得体会

模块化和结构化的代码让功能分明,使用 requests 和 BeautifulSoup 能够高效处理网络请求和 HTML 解析。此外,错误处理的重要性不容忽视,网络请求可能失败且网站结构会变化,因此要灵活应对。

作业②

要求:用requests和BeautifulSoup库方法定向爬取股票相关信息,并存储在数据库中。

(1) 实验过程

选取网站:东方财富网:https://www.eastmoney.com/

核心代码:

数据抓取,从指定的 API 获取股票数据并解析 JSON

def fetch_stock_data(page):
    url = f"http://64.push2.eastmoney.com/api/qt/clist/get?cb=jQuery&pn={page}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81&s:2048&fields=f2,f3,f4,f5,f6,f7,f12,f14&_=1696660618067"
    response = requests.get(url)
    json_data = response.text[response.text.find('(')+1:response.text.rfind(')')]
    data = json.loads(json_data)
    return data.get('data', {}).get('diff', [])

数据存储,将抓取到的股票数据存储到 SQLite 数据库中

def store_data(stocks):
    conn = sqlite3.connect(DATABASE)
    cursor = conn.cursor()
    for stock in stocks:
        if isinstance(stock, dict):  # 确保 stock 是字典
            cursor.execute('''
                INSERT INTO stocks (name, code, price, change, percent_change, volume) VALUES (?, ?, ?, ?, ?, ?)
            ''', (
                stock.get('f12'),  # 股票名称
                stock.get('f14'),  # 股票代码
                stock.get('f2'),   # 当前价格
                stock.get('f3'),   # 涨跌额
                stock.get('f4'),   # 涨跌幅
                stock.get('f6')    # 成交量
            ))
    conn.commit()
    conn.close()

输出结果:

数据库查询结果:

(2)心得体会

抓取数据时需注意 API 的请求限制和数据格式,这要求在编程中保持灵活性和对错误的处理能力。其次,将数据有效地存储到数据库中不仅要考虑性能,还要确保数据的完整性和准确性。

作业③

要求:爬取中国大学2021主榜(https://www.shanghairanking.cn/rankings/bcur/2021)所有院校信息,并存储在数据库中,同时将浏览器F12调试分析的过程录制Gif加入至博客中。录制Gif加入至博客中。

(1) 实验过程

核心代码:

将数据储存到数据库中

# 存储数据到SQLite数据库
def store_data(df):
    conn = sqlite3.connect('university_rankings.db')
    df.to_sql('rankings', conn, if_exists='replace', index=False)
    conn.close()

输出结果:

数据库查询:

F12调试分析的过程:

(2) 心得体会

完成这个任务让我深刻体会到数据抓取的重要性,它是高效收集信息的关键。同时,正则表达式的灵活性使得提取特定数据变得可能,尽管需要仔细设计以确保准确性。使用 SQLite 进行数据存储简单有效,适合小型项目,理解数据的持久化和结构化存储对后续分析至关重要。