【项目实训】数据获取工作

一、爬取目标

牛客网面试经验

包括面试经验的标题,内容,URL等,保存在csv文件中。

二、网页分析

观察面试经验网页的URL,发现主要有两类

一种是feed/main/detail。

标题和内容分别在这两个节点下,可以使用xpath解析

一种是discuss

这种标题和内容分别在这两个节点下,也可以使用xpath解析

由于这两种网页的结构不同,我分别写了两个函数爬取

三、代码实现

由于网页使用Ajax动态加载,在没有鼠标滚动的情况下是没有数据的,所以我使用了python的selenium库,模拟鼠标滚轮,使页面内容全部加载出来:

def getIndexPage():
    driver = webdriver.Chrome()
    # 这个是牛客网java实习面经的界面,可以根据自己的需要,找好网页,然后将连接复制到这里来
    driver.get("https://www.nowcoder.com/discuss/experience?tagId=639&order=3&companyId=0&phaseId=1")
    time.sleep(3)
    js = "return action=document.body.scrollHeight"
    height = driver.execute_script(js)
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    time.sleep(5)
    t1 = int(time.time())
    num = 0
    # 将滚动条拉到最下面,直到所有内容都加载出来
    while True:
        t2 = int(time.time())
        if t2 - t1 < 30:
            new_height = driver.execute_script(js)
            if new_height > height:
                time.sleep(1)
                driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
                height = new_height
                t1 = int(time.time())
        elif num < 3:
            time.sleep(3)
            num = num + 1
        else:
            print("滚动条已经处于页面最下方!")
            driver.execute_script('window.scrollTo(0, 0)')
            break
    content = driver.page_source
    # 将内容保存到本地文件
    with open('index_page.html', 'w', encoding='utf-8') as file:
        file.write(content)
    return content

上面的函数返回了一个包含所有URL链接的页面,然后就需要从中获取数据的URL:

def scrape_url_list():
    html = etree.parse("index_page.html", etree.HTMLParser())

    hrefs = html.xpath('//a[@data-v-d89ade80]')

    url_list = []

    for a in hrefs:
        href = a.get('href')
        url_list.append(BASE_URL + href)

    return url_list

最后写两个页面解析函数,从页面中提取我们需要的数据并返回:

def parse_detail(response):
    html = etree.HTML(response)
    title = html.xpath('//div[@class="tw-flex" and @data-v-009b564e]/h1//text()')
    content = html.xpath("//div[contains(@class, 'feed-content-text')]/text()")
    return {"title": title, "content": content}


def parse_discussion(response):
    html = etree.HTML(response)
    title = html.xpath('//div[@class="content-post-title"]/h1//text()')
    content_list = html.xpath("//div[@class='nc-slate-editor-content']//p//text()")
    content_str = "\n".join(content_list)
    return {"title": title, "content": content_str}

在main函数中运行

if __name__ == '__main__':
    # index_page = getIndexPage()
    urls = scrape_url_list()

    data = pd.DataFrame(columns=['title', 'content', 'url'])
    parsed_res = {"title": None, "content": None, 'url': None}

    for url in urls:
        text = scrape_page(url)
        if url.startswith("https://www.nowcoder.com/feed/main/detail"):
            parsed_res = parse_detail(text)
        elif url.startswith("https://www.nowcoder.com/discuss"):
            parsed_res = parse_discussion(text)
        parsed_res["url"] = url
        data = data.append(parsed_res, ignore_index=True)
    data.to_csv("java面经.csv")

四、成果展示

最后爬取到的数据展示如下:

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
电商平台数据可视化是指将电商平台产生的大量数据通过图表、图像等形式进行展示和分析,以便更直观地了解电商平台的运营情况、用户行为等相关信息。 在spark项目实训中,我们可以通过使用Spark来处理和分析电商平台的数据,并将其可视化展示出来。以下是一个可能的实施方案: 1. 数据采集:首先,我们需要从电商平台的数据库中提取出所需的数据。这些数据可以包括订单信息、用户信息、商品信息等等。 2. 数据清洗和预处理:通过Spark对采集到的数据进行清洗和预处理,去除无效或错误的数据,并进行必要的数据转换和计算,以便后续的分析和可视化操作。 3. 数据分析:使用Spark的强大计算能力,对清洗和预处理后的数据进行各种统计分析,如订单量、销售额、用户活跃度等等。这些分析结果将成为后续可视化展示的依据。 4. 可视化展示:利用可视化工具(如Matplotlib、Tableau等),将分析得到的数据结果呈现在图表、图像等形式上。可以使用柱状图、折线图、饼图等不同类型的图表来展示数据,以便更直观地了解电商平台的运营情况。 5. 用户交互:为了增加用户的参与和互动,可以在可视化展示平台上添加交互式功能,如选择日期范围、点击某个图表获取详细数据等等。这样用户可以根据自己的需求去探索和分析数据,增加数据可视化的实用性和趣味性。 通过以上步骤,我们可以将电商平台的数据通过Spark进行处理和分析,并通过可视化展示呈现给用户,帮助他们更好地了解和分析电商平台的情况,从而做出有效的决策和改进策略。这种数据可视化的方式可以提高数据分析的效率和可理解性,帮助电商平台实现更好的运营和发展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值