2024数据采集与融合技术实践第一次作业

这个作业属于哪个课程 <首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园 (cnblogs.com)>
这个作业要求在哪里 <作业1 - 作业 - 2024数据采集与融合技术实践 - 班级博客 - 博客园 (cnblogs.com)>
学号 <102202126>

一、作业内容

作业①

  • 要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。

  • 代码如下

    import requests
    from bs4 import BeautifulSoup
    from prettytable import PrettyTable
    
    # 目标网址
    url = 'http://www.shanghairanking.cn/rankings/bcur/2020'
    
    # 发送HTTP请求
    response = requests.get(url)
    response.encoding = 'utf-8'  # 设置编码
    
    # 解析HTML内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 查找排名表格
    table = soup.find('table', {'class': 'rk-table'})
    
    # 提取表格行
    rows = table.find_all('tr')
    
    # 创建PrettyTable对象
    pt = PrettyTable()
    pt.field_names = ["排名", "学校名称", "省市", "学校类型", "总分"]
    
    # 遍历每一行,提取并添加信息到表格
    for row in rows[1:]:  # 跳过表头
        cols = row.find_all('td')
        rank = cols[0].text.strip()
        name = cols[1].text.strip()
        province = cols[2].text.strip()
        type_ = cols[3].text.strip()
        score = cols[4].text.strip()
        pt.add_row([rank, name, province, type_, score])
    
    print(pt)
    
  • 输出信息:

  • Gitee文件夹链接:陈家凯第一次实践作业

  • 心得体会:学会了使用requests库发送HTTP请求并处理响和使用BeautifulSoup库解析HTML内容并提取所需数据。

    作业②

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

  • 代码如下

    import re
    import urllib.request
    import os
    
    def getHTMLText(url):
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
        }
        try:
            req = urllib.request.Request(url, headers=headers)
            data = urllib.request.urlopen(req).read().decode()
            return data
        except Exception as err:
            print(f"Error fetching data from {url}: {err}")
            return ""
    
    def parsePage(uinfo, data):
        plt = re.findall(r'"sku_price":"([\d.]+)"', data)  # 商品价格
        tlt = re.findall(r'"ad_title_text":"(.*?)"', data)  # 商品名称
    
        base_url = "https://img1.360buyimg.com/n6/"  # 替换为实际的基础 URL
    
        min_length = min(len(plt), len(tlt))
    
        for i in range(min_length):
            price = plt[i].replace('"', '')  # 去掉引号
            name = tlt[i].strip('"')  # 去掉引号
    
            uinfo.append([len(uinfo) + 1, price, name])  # 添加信息到uinfo列表
    
        return uinfo
    
    def downloadImage(img_url, save_path):
        try:
            if img_url != '无图片':
                urllib.request.urlretrieve(img_url, save_path)
        except Exception as e:
            print(f"Error downloading {img_url}: {e}")
    
    def printGoodslist(uinfo):
        tplt = "{0:^5}\t{1:^10}\t{2:^20}"
        print(tplt.format("序号", "价格", "商品名称"))
        for i in uinfo:
            print(tplt.format(i[0], i[1], i[2]))
    
    def main():
        base_url = 'https://re.jd.com/search?keyword=%E4%B9%A6%E5%8C%85&enc=utf-8&page='
        uinfo = []
    
        # 循环爬取3-4页
        for page in range(3, 5):
            url = f"{base_url}{page}"
            data = getHTMLText(url)
            if data:
                parsePage(uinfo, data)
    
        printGoodslist(uinfo)
    
    if __name__ == '__main__':
        os.makedirs(r"D:\Users\20733\Desktop\数据采集与融合技术\书包", exist_ok=True)
        main()
    
  • 输出信息:

  • Gitee文件夹链接:陈家凯第一次实践作业

  • 心得体会:学会了设置了请求头headers以伪装成浏览器请求,避免被网站屏蔽

    作业③

  • 要求:

  • 代码如下

    import requests
    from bs4 import BeautifulSoup
    import re
    import os
    
    def fetch_images(url, download_folder):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
        }
    
        # 获取网页内容
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
    
        # 解析HTML内容
        soup = BeautifulSoup(response.text, 'html.parser')
    
        # 查找所有以.jpeg或.jpg结尾的图片URL
        img_tags = soup.find_all('img', src=re.compile(r'\.(jpeg|jpg)$', re.IGNORECASE))
        img_urls = [img['src'] for img in img_tags]
    
        # 确保下载文件夹存在
        os.makedirs(download_folder, exist_ok=True)
    
        # 下载每张图片
        for img_url in img_urls:
            # 处理相对URL
            if not img_url.startswith('http'):
                img_url = requests.compat.urljoin(url, img_url)
    
            img_name = os.path.join(download_folder, os.path.basename(img_url))
            img_data = requests.get(img_url, headers=headers).content
            with open(img_name, 'wb') as img_file:
                img_file.write(img_data)
            print(f"Downloaded {img_name}")
    
    if __name__ == "__main__":
        webpage_url = 'https://news.fzu.edu.cn/yxfd.htm'
        download_folder = 'image'
        fetch_images(webpage_url, download_folder)
    
  • 输出信息:


  • Gitee文件夹链接:陈家凯第一次实践作业

  • 心得体会:体会到了处理文件操作,包括创建目录和保存文件,同时也体会了如何处理相对 URL

总结

  • 通过本次实验,我更加深刻的体会到了数据采集和处理的几个重要库和技术,包括 requests 用于发送 HTTP 请求、BeautifulSoup 用于解析 HTML、re 用于字符串匹配和处理。通过这些工具,可以高效地进行数据采集和分析,为后续的数据融合和决策提供支持。
posted @ 2024-10-16 10:51  chenoojkk  阅读(23)  评论(0编辑  收藏  举报