华农华迪实训训练-获得词频前10的字段数据-requests+Spark RDD

Posted 夜中听雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华农华迪实训训练-获得词频前10的字段数据-requests+Spark RDD相关的知识,希望对你有一定的参考价值。

题目

1、网络数据采集,使用requests或者scrapy爬取数据,存储到一个文本文件 数据源文件.txt 中。
2、使用Spark RDD或者Spark Sql,读取 数据源文件.txt 内容,对某一个字段的数据进行统计,获得词频前10的字段数据。把结果放在一个文本文件 排行结果.txt 中。

回答

爬取的网页

https://hz.house.ifeng.com/news/2014_10_28-50087618_1.shtml

上交的四个文件

1、用requests爬虫爬取数据

# -*-coding:utf-8 -*-

import os

import requests
from lxml import etree


def getPageInfo():
    url = 'https://hz.house.ifeng.com/news/2014_10_28-50087618_1.shtml'

    result = "";
    response = requests.get(url=url)
    response.encoding = 'utf-8'
    tree = etree.HTML(response.text)
    list = tree.xpath("//div[@class='content-info']/table/tbody/tr")
    for li in list:
        text1 = li.xpath("./td/text()")

        if len(text1) < 7 or text1[0]=="序号":
            continue
        else:
            result += text1[0].replace('\\xa0', '').replace('\\ufffd', '') + ";" + text1[1].replace('\\xa0', '').replace(
                '\\ufffd', '') + ";" + text1[2].replace('\\xa0', '').replace('\\ufffd', '') + ";" + text1[3].replace(
                '\\xa0', '').replace('\\ufffd', '') +";"  + text1[4].replace('\\xa0', '').replace('\\ufffd', '') +";"+ text1[
                          5].replace('\\xa0', '').replace('\\ufffd', '') +";"+ text1[6].replace('\\xa0', '').replace('\\ufffd','') + "\\n"
    print("完成")
    file = os.getcwd() + '/数据源文件.txt'
    output = open(file, mode='w')
    output.write(result)
    output.close()

if __name__ == '__main__':
    getPageInfo()

2、用Spark RDD处理数据

# -*- coding:utf-8 -*-

import os

from itertools import islice
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("实例1").master("local[*]").getOrCreate()
sc = spark.sparkContext

textFile = sc.textFile("数据源文件.txt")

text_list = textFile.collect()
rdd_list = []
for li in text_list:
    rdd_list.append(li.split(";")[2])

rdd = sc.parallelize(rdd_list)
pairRDD = rdd.map(lambda word: (word, 1))
newRdd = pairRDD.reduceByKey(lambda a, b: a + b)

keyRdd = newRdd.sortBy(lambda x: x[1], ascending=False)
tmp_list = keyRdd.collect()
new_list = []
for i in tmp_list:
        new_list.append(i)
iterator = islice(new_list, 10)

file = os.getcwd() + '/排行结果.txt'
output = open(file, 'w')

for item in iterator:
    output.write(item[0])
    output.write(",%s\\n"%(item[1]))#'\\ufffd'时,要用Notepad++把文件"数据源文件.txt"转为UTF-8编码

output.close()

3、数据源文件.txt

1;龙湖春江郦城;滨江;18;0;2178.61;23757
2;海威钱塘之星;滨江;13;0;629.55㎡;17398
3;大家运河之星;拱墅;12;0;1052.72㎡;10457
4;保利城市果岭;下沙;8;0;743.05㎡;10457
5;金地格林格林;江干;7;8;609.97㎡;10238
6;远洋杭州大运河商务区;拱墅;5;0;346.72㎡;22681
7;之江九里;之江;4;0;358.08㎡;17747
8;绿城巧园;滨江;4;0;353.83㎡;16858
9;万科西庐;西湖;4;1;404.45㎡;22596
10;绿地旭辉城;滨江;4;0;346.18㎡;22345
11;中海定山府;之江;4;0;356.99㎡;9530
12;绿城兰园;下城;4;0;357.54㎡;42924
13;绿城西溪诚园;西湖;6;0;673.66㎡;31601
14;万科璞悦湾;滨江;4;4;483.78㎡;19595
15;宋都香悦郡;拱墅;3;5;266.34㎡;13039
16;远洋公馆绿园;拱墅;3;0;474.16㎡;30714
17;黄龙金茂悦;拱墅;3;0;267.85㎡;23375
18;滨江紫金府;西湖;3;0;318.31㎡;24619
19;世茂东壹号;江干;3;0;294.09㎡;17211
20;广大融城印象;江干;3;0;259.44㎡;12178
21;万科紫台;江干;3;0;304.39㎡;18594
22;玲珑府;滨江;3;0;146.09㎡;14444
23;德信东望;江干;3;0;269.14㎡;17704
24;富越香郡;拱墅;3;0;265.5㎡;17457
25;滨江万家星城;下城;3;0;265.62㎡;20003
26;龙湖名景台;江干;3;0;266.46㎡;13745
27;大家多立方;江干;2;0;169.1㎡;14678
28;绿城丽江公寓;江干;2;0;164.76㎡;16500
29;野风现代中心;下城;2;0;100.46㎡;20254
30;泰地北上新城;下城;2;0;84.99㎡;11230
31;华鸿罗兰春天;江干;2;0;199.39㎡;13251
32;中海寰宇天下;滨江;2;0;601.56㎡;18285
33;中国铁建国际城;拱墅;2;0;176.76㎡;18399
34;保利玫瑰湾;下沙;2;0;166.5㎡;10505
35;万银双子中心;江干;2;0;179.72㎡;20600
36;新中宇维萨;江干;2;0;178.69㎡;20314
37;武林壹号;拱墅;2;0;651.99㎡;60122
38;九龙仓碧玺;拱墅;2;0;177.77㎡;19297
39;同人精华大厦;西湖;2;0;102.14㎡;15482
40;杭州碧桂园;下沙;2;0;178.26㎡;9877
41;德信晓宸;拱墅;2;0;280.26㎡;18130
42;莱茵矩阵国际;拱墅;2;0;529.84㎡;21987
43;万和玺园;下城;2;0;176.73㎡;23473
44;鑫运时代金座;江干;2;0;101.28㎡;12786
45;宝嘉誉峰;拱墅;2;0;181.03㎡;21312
46;天阳晴朗;江干;2;0;178.49㎡;12213
47;宋都东郡国际;下沙;2;2;135.9㎡;9182
48;三江花园道壹号;拱墅;2;2;177.82㎡;17699
49;贺田尚城;滨江;1;0;138.24㎡;18301
50;莱蒙水榭春天;滨江;1;0;84.11㎡;21043
51;金隅观澜时代;下沙;1;0;136.76㎡;10200
52;坤和和家园;西湖;1;0;64.53㎡;19680
53;金都城市芯宇;西湖;1;0;53.62㎡;27635
54;德信泊林印象;江干;1;0;121.52㎡;14478
55;绿城西子田园牧歌;拱墅;1;0;88.55㎡;16107
56;裕丰青鸟香石公寓;下城;1;0;137.08㎡;24073
57;龙湖滟澜山;下沙;1;0;424.3㎡;19090
58;万亚金沙湖1号;下沙;1;0;47.35㎡;13800
59;德信臻园;拱墅;1;0;216.85㎡;27115
60;世茂钱塘帝景;滨江;1;0;89.87㎡;18043
61;华盛达阅城;拱墅;1;0;55.93㎡;9922
62;方正荷塘月色;拱墅;1;0;88.12㎡;28520
63;中豪四季公馆;江干;1;0;129.89㎡;12549
64;中天西城纪;拱墅;1;0;42.66㎡;18049
65;远洋大河宸章;拱墅;1;0;191.69㎡;29624
66;滨江金色黎明;江干;1;0;138.72㎡;17444
67;公元沐桥;之江;1;0;249.92㎡;46014
68;协安紫郡;西湖;1;0;89.93㎡;15002
69;中天官河锦庭;滨江;1;0;89.76㎡;20860
70;新华园;拱墅;1;0;148.22㎡;34800
71;广宇东承府;江干;1;0;235.33㎡;17719
72;佳兆业玖珑山;之江;1;0;87.36㎡;15653
73;佳美中心;下城;1;0;57.15㎡;22117
74;九龙仓君玺;下城;1;0;160.14㎡;43727
75;日信国际DOUBLE时代;上城;1;0;38.86㎡;31521
76;融科瑷骊山;之江;1;0;74.55㎡;13231
77;望江府;上城;1;0;89.65㎡;41040
78;天阳尚景国际;拱墅;1;0;89.56㎡;20500
79;中国铁建国际花园;江干;1;0;119.56㎡;17397
80;方正御星;拱墅;1;0;89.82㎡;17170
81;天阳尚城国际;江干;1;0;89.21㎡;16757
82;杭州中润中心;江干;1;0;29.56㎡;14390
83;万科公园大道;江干;1;0;131.52㎡;21593
84;银杏汇;滨江;1;0;89.69㎡;18285
85;融创河滨之城;西湖;1;0;184.39㎡;30641
86;广宇锦绣桃源;拱墅;1;0;86.44㎡;12473
87;景瑞申花壹号院;拱墅;1;0;89.18㎡;21529
88;复地黄龙和山;西湖;0;1;0㎡;0
89;中粮方圆府;下城;0;1;0㎡;0
90;东方铭楼;下沙;0;16;0㎡;0

4、排行结果.txt

拱墅,24
江干,21
滨江,12
西湖,9
下城,9
下沙,8
之江,5
上城,2

以上是关于华农华迪实训训练-获得词频前10的字段数据-requests+Spark RDD的主要内容,如果未能解决你的问题,请参考以下文章

java实训一——词频统计

Java程序设计综合项目实训一——词频统计

暑假实训营之 Python爬虫技术

循环神经网络

如何在redis中存储多个字段,并根据某些字段获得前10个结果

如何对窗口中的某个字段进行排序以获得前 N 个值,并对 DolphinDB 中的相应字段进行聚合计算?