数据爬取期末复习

  一、单项选择题

说明:题目中使用到的soup对象都来自下面的这段程序:

from bs4 import BeautifulSoup

doc='''

<html><head><title>The Dormouse's story</title></head>

<body>

<p class="title"><b>The Dormouse's story</b></p>

<p class="story">

Once upon a time there were three little sisters; and their names were

<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,

<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and

<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;

and they lived at the bottom of a well.

</p>

<p class="story">...</p>

</body>

</html>

'''

soup=BeautifulSoup(doc,"lxml"

  1.  下列程序执行后a数组变成11个元素

    import numpy as np

    a=np.random.randint(0,3,10)

    a[10]=1

    print(a)

    A. 正确            B. 错误

  2.  按一行两列左右画出y=x,y=x*x的图像,程序:

    import numpy as np

    import matplotlib.pyplot as plt

    x=np.linspace(0,1,10)

    ________________

    plt.plot(x,x,label="y=x")

    plt.legend()

    ________________

    plt.plot(x,x*x,label="y=x*x")

    plt.legend()

    plt.show()

    缺少的语句是:

    A. 
    plt.subplot(1,2,1)

    plt.subplot(1,2,2)

    B.

    plt.subplot(1,2,2)

    plt.subplot(1,2,1)

    C.

    plt.subplot(2,1,1)

    plt.subplot(2,1,2)

    D.

    plt.subplot(2,1,2)
    plt.subplot(2,1,1)

  3. 执行如下代码后的输出结果是(      )。

    import pandas as pd

    aSer = pd.Series( [97, 98, 99, 100], index=["a","b","c","d"] )

    aSerValues = aSer.values

    print(aSerValues)

    A. aSerValues

    B. ["a","b","c","d"]

    C. [97, 98, 99, 100]
    D. [a, b, c, d]

  4. 程序:

    import numpy as np

    a=np.arange(12)

    a=a.reshape(3,4)

    a=a[[1,2],0]

    print(a)

    结果是[[4],[8]]

    A. 正确     B. 错误

  5.  使用selenium+chrome可以爬取一般javaScript处理的网页数据

    A. 正确

    B. 错误

  6. soup=BeautifulSoup(doc,"lxml")

    _______________________________

    print(tag)

    程序结果找到class="story"的<p>元素,缺失的语句是

    A. tag=soup.select_one("p[class='story']")

    B. tag=soup.find("p",attr={"class":"story"})

     

    C. tag=soup.soup.select("p[class='story']")

    D. tag=soup.find("p",class="story")

  7.  执行如下代码创建一个DataFrame对象aDf,在这里,aDf对象的列名称是(      )。

    import pandas as pd

    aDict = {'decimal':{'A':64,'B':65,'C':66,'D':67,'E':68},'lower':{'A':'a','B':'b','D':'d'},
    'octal':{'B':102,'C':103,'D':104, 'E':105,'F':106}}
    aDf = pd.DataFrame(aDict)

    A. “decimal”、”lower”、”octal”

    B. “A”、”B”、”C”

    C. “A”、”B”、”C”、“D”、”E”、”F”

    D. “decimal”、”lower”、”octal”、“A”、”B”、”C”

  8. soup=BeautifulSoup(doc,"lxml")

    ___________________________________

    for tag in tags:

        print(tag)

    查找文档中class="sister"的所有元素,缺失语句是:

    A. tags=soup.select("[class='sister']")

    B. tags=soup.select_one("[class='sister']")

    C. tags=soup.select_all("[class='sister']")

    D. tags=soup.find_all(attrs={"class":"sister"})

     

  9. 获取<p>元素的所有子孙元素节点

    from bs4 import BeautifulSoup

    doc='''

    <html><head><title>The Dormouse's story</title></head>

    <body>

    <p class="title"><b>The <i>Dormouse's</i> story</b> Once upon a time ...</p>

    </body>

    </html>

    '''

    root=BeautifulSoup(doc,"lxml")

    ______________________________

    for x in ________________________:

    print(x)

    缺失的语句是:

    A.  tag=soup.find("p"); tag.descendants

    B.  tag=soup.find("p"); tag.children

    C.  tag=soup.find_all("p"); tag.children

    D. tag=soup.find_all("p"); tag.descendants

  10.  程序:

    import re

    m=re.search(r"\d+$","a12b456")

    print(m)

    匹配的结果是“456”字符串。

    A. 正确

    B. 错误

  11. 执行如下代码后,输出结果是(      )。

    import numpy as np

    aArray = np.arange(1,6)

    bArray = aArray[-3:]

    print(bArray)

    A. [1 2 3]

    B. [2 3 4]

    C. [3 4 5]

    D. [4 5 6]
     

  12.  运行如下Python代码后,输出结果是(      )。

    A = [1,2,3,4]

    B = A

    A[1:3] = (8,9)

    print(B)

    A.     [1,2,9,4]

    B.     [1,8,3,4]

    C.     [1,8,9,4]

    D.     [1,2,3,4]

  13.  有一个学生DataFrame如下:

    import pandas as pd

    d=pd.DataFrame({"Name":["A","B","C","D"],

                    "Sex":["男","女","女","男"],

                    "Age":[20,21,22,23] })

    找出所有男生的记录,操作是:

    A. d.query(Sex=="男")

    B. d.query(' Sex=="男"')

    C. d.query[Sex=="男"]

    D. d.query[' Sex=="男"']

  14. 查找文档中所有<a>超级链接包含的文本值

    soup=BeautifulSoup(doc,"lxml")

    _____________________________

    for tag in tags:

        ________________________

    缺失的语句是:

    A. tags=soup.select("a"); print(tag.text)

    B.tags=soup.find("a"); print(tag["text"])

    C.tags=soup.select_one("a"); print(tag.text)

    D.tags=soup.find_all("a"); print(tag["text"])

  15. 找出文档中<p class="title"><b>The Dormouse's story</b></p>的<b>元素节点的所有父节点的名称。

    soup=BeautifulSoup(doc,"lxml")

    print(soup.name)

    ________________________________

    while tag:

        print(tag.name)

        ____________________________

    缺失的语句是:

    A. tag=soup.find("b"); tag=tag.parent

    B. tag=soup.find("b"); tag=tag["parent"]

    C. tag=soup.find_all("b"); tag=tag.parent

    D. tag=soup.find_all("b"); tag=tag["parent"]

  16.  

    通过函数查找可以查找到一些复杂的节点元素,查找文本值以"cie"结尾所有<a>节点

    def endsWith(s,t):

        if len(s)>=len(t):

            ___________________________

        return False

    def myFilter(tag):

        return (tag.name=="a" and _____________________________)

    soup=BeautifulSoup(doc,"lxml")

    tags=soup.find_all(myFilter)

    for tag in tags:

        print(tag)

    缺失的语句是:

    A. return s[len(s)-len(t):]==t; endsWith(tag.text,"cie")

    B. return s[len(s)-len(t)-1:]==t; endsWith(tag.text,"cie")

    C. return s[len(s)-len(t)-1:]==t; endsWith(tag["text"],"cie")

    D. return s[len(s)-len(t):]==t; endsWith(tag["text"],"cie")

  17.  标准差越大,说明大部分数值和其平均值差异越大。(对)

  18. CSV文件存储的是二进制数据。(错)

  19.  有一个随机值数组a=numpy.random.random((4,5)),截取前2行与前3列的数组,操作是

    有没有可能是前2行与前2列

    A. a[0:2,0:2]

    B. a[0:2,:]

    C. a[:,0:2]

    D. a[[0,1],[0,1]]

  20.  

     下列程序画出A,B的比例饼图,是否正确?

    import numpy as np

    import matplotlib.pyplot as plt

    count=np.array([10,12])

    plt.pie(count,labels=["A","B"])

    plt.show()

    A. 正确

    B. 错误

  21.  BeautifulSoup是一个可以爬取网页数据的库。

    A. 正确

    B. 错误

  22.   可以使用索引的方式,操作Series对象的一个或一组元素。(对)

  23. 对序列对象进行切片操作,切片的数值不可以是负数。(错)

  24.  使用numpy二维数组a中np.nan的值元素替换为0

    A. a[a==0]=0

    B. a[np.isnan(a)]=0

    C. a[isnan(a)]=0

    D. a[np.isnull(a)]=0

  25.  numpy是一个数组,只支持一维和二维的数组

    A. 正确

    B. 错误

  26.  运行如下Python代码后,输出结果是(      )。

    def numCompare(aNum, bNum):

        if aNum > bNum:

            print("%d 大于 %d" % ( aNum, bNum))

        else:

            print("%d 小于 %d" % ( aNum, bNum))

    numCompare(5,5)

    A.     aNum小于bNum

    B.     5 大于 5

    C.     5 小于 5

    D.     5 等于 5

  27.  查找文档中所有超级链接地址

    soup=BeautifulSoup(doc,"lxml")

    ______________________

    for tag in tags:

        _________________

    缺失的语句是:

    A. tags=soup.find_all("a");print(tag["href"]);

    B. tags=soup.find("a");print(tag.href)

    C. tags=soup.find_all("a");print(tag("href"))

    D. tags=soup.find("a");print(tag.("href"))

  28. 在主线程中启动一个子线程执行reading函数。

    import threading

    import time

    import random

    def reading():

        for i in range(10):

            print("reading",i)

            time.sleep(random.randint(1,2))

    _______________________________

    r.setDaemon(False)

    r.start()

    print("The End")

    A.  r=threading.Thread(target=reading)

    B. r=threading.Thread(reading)

    C. r=threading.Thread(target=reading())

    D. r=Thread(target=reading)

  29.  如果为DataFrame对象指定了索引,则不能对该对象进行切片操作,因为其默认的整数索引不存在了。(错)

  30.  执行如下代码后的输出结果是(      )。

    from numpy import array, arange, hstack, vstack, concatenate

    aArray = array([arange(1,3), arange(3,5)])

    bArray = array([arange(5,7), arange(7,9)])

    cArray = hstack((aArray, bArray))

    print(cArray)

    A. [[1 2 3 4], [5 6 7 8]]

    B. [[1 2], [ 3 4], [5 6],[7 8]]

    C. [[1 2 5 6], [3 4 7 8]]

    D. [[1 2], [ 5 6], [3 4],[7 8]]

     注:hstack是沿水平方向拼接

  31. 启动一个前台线程

    import threading

    import time

    import random

    def reading():

        for i in range(5):

            print("reading",i)

            time.sleep(random.randint(1,2))

    r=threading.Thread(target=reading)

    __________________

    r.start()

    print("The End")

    A.  r.setDaemon(True)

    B.  r.setDaemon(true)

    C. r.setDaemon(False)

    D. r.setDaemon(false)

  32. 查找文档中所有<p>超级链接包含的文本值

    soup=BeautifulSoup(doc,"lxml")

    __________________________________

    for tag in tags:

        ________________________

    缺失的语句是:

    A. tags=soup.select("p");  print(tag.text)

    B.tags=soup.select_all("p");  print(tag.text)

    C.tags=soup.find("p");  print(tag["text"])

    D.tags=soup.find_all("p");  print(tag["text"])

  33.  通过使用flattern( ) 函数将二维数组aArray展平,并将结果赋值给数组bArray。此时,修改bArray元素的值,不会修改aArray的值。(对)

  34. 编写服务器程序server.py如下:

    import flask

    app=flask.Flask(__name__)

    @app.route("/")

    def index():

        try:

            province=flask.request.args.get("province")

            city = flask.request.args.get("city")

            return province+","+city

        except Exception as err:

            return str(err)

    if __name__=="__main__":

        app.run()

    编写客户端程序client.py如下:

    import urllib.parse

    import urllib.request

    url="http://127.0.0.1:5000"

    try:

        province= urllib.parse.quote("广东")

        city= urllib.parse.quote("深圳")

        data="province="+province+"&city="+city

        html=urllib.request.urlopen("http://127.0.0.1:5000?"+data)

        ____________________

        html = html.decode()

        print(html)

    except Exception as err:

        print(err)

    缺失的语句是

    A.  html=html.read()

    B.  html.read()

    C.  html=html.get()

    D.  html.get()

  35. 我们查找文档中的href="http://example.com/lacie"的节点元素<a>

    def myFilter(tag):

        print(tag.name)

        __________________________________________

    soup=BeautifulSoup(doc,"lxml")

    tag=soup.find_all(myFilter)

    print(tag)

    缺失的语句是:

    A. return (tag.name=="a" and tag.has_attr("href") and tag.href=="http://example.com/lacie")

    B. return (tag.name=="a" and tag["href"]=="http://example.com/lacie")

    C. return (tag.name=="a" and tag.has_attr("href") and tag["href"]=="http://example.com/lacie")

    D. return (tag.name=="a" and tag.href=="http://example.com/lacie")

  36. import re

    s="testing search"

    reg=r"[A-Za-z]+\b"

    m=re.search(reg,s)

    while m!=None:

        start=m.start()

        end=m.end()

        print(s[start:end],end=" ")

        s=s[end:]

        m=re.search(reg,s)

    结果:

    A.  testing search

    B.  testing

    C. search

    D. search testing

  37.  

     运行如下Python代码后,输出结果是(      )。

    sleepPerDay = (8,8,7,8,6,8,

                   5,7,7,9,7,8,

                   7,9,7,1,6,9,

                   8,7,1,8,7,6,

                   7,8,6,8,6,6)

    totalSleep = 0

    for item in sleepPerDay:

        if item > 8:

            totalSleep += item

    print(totalSleep)

    A.     0

    B.     27

    C.     35

    D.     43

  38. import pandas as pd

    s=pd.Series(["a","b","c"])

    s.index=["x","y","z"]

    s.loc["y"]="Y"

    print(s.values)

    结果是 ["x","Y","z"]

    A. 正确

    B. 错误

  39.  只能使用python或者numpy、pandas等工具进行数据分析,其他编程语言都不能够进行数据分析工作。。(错)

  40.  如果数据集当中存在缺失值或异常值,那么通常需要首先处理这些缺失值或异常值,然后再对这组数据进行分析。(对)

  41. 相关系数是研究变量或数据之间线性相关程度的量。(对)

  42.  有一个学生DataFrame如下:

    import pandas as pd

    d=pd.DataFrame({"Name":["A","B","C","D"],

                    "Sex":["男","女","女","男"],

                    "Age":[20,21,22,23] })

    把所有女生的年龄增加1,操作是:

    A. d.loc[d.Sex=="女","Age"]=d.loc[d.Sex=="女","Age"]+1

    B. d.loc["Age", d.Sex=="女"]=d.loc["Age", d.Sex=="女"]+1

    C. d.query('Sex=="女"').Age=d.query('Sex=="女"').Age+1

    D. 都不对

  43.  执行如下代码后, aArray的值是(      )。

    import numpy as np

    aArray = np.array([np.arange(1,4),np.arange(2,5)])

    A.    [1 2 3 4; 2 3 4 5]

    B.    [[1 2 3 4]

    [2 3 4 5]]

    C.    [1 2 3; 2 3 4]

    D.    [[1 2 3 ]

    [2 3 4]]

  44. 下列程序计算数组a中0的元素个数

    import numpy as np

    a=np.random.randint(0,3,10)

    print(a)

    print(a[a==1].sum())

    A. 错误

    B. 正确

  45.  有一个学生DataFrame如下:

    import pandas as pd

    d=pd.DataFrame({"Name":["A","B","C","D"],

                    "Sex":["男","女","女","男"],

                    "Age":[20,21,22,23] })

    把所有女生的平均年龄,操作是:

    A. print(d.loc[d.Sex=="女","Age"].mean())

    B. print(d.iloc[d.Sex=="女","Age"].mean())

    C. print(d.query('Sex=="女"').loc["Age"].mean())

    D. print(d.query('Sex=="女"').iloc["Age"].mean())

  46. Python是一门解释性语言,可以对Python源代码进行编译。(错)

  47. 执行如下代码后,输出结果是(      )。

    import numpy as np

    aArray = np.arange(1,6)

    x = aArray[2]

    print(x)

    A. 1

    B. 2

    C. 3

    D. 4

  48.  需要在代码中引入math包的sqrt( )函数,应该使用(      )命令实现。

    A. import sqrt and math

    B. from math import sqrt

    C. import math’s sqrt

    D. import sqrt from math

  49. 获取<p>元素的所有直接子元素节点

    from bs4 import BeautifulSoup

    doc='''

    <html><head><title>The Dormouse's story</title></head>

    <body>

    <p class="title"><b>The <i>Dormouse's</i> story</b> Once upon a time ...</p>

    </body>

    </html>

    '''

    root=BeautifulSoup(doc,"lxml")

    ________________

    for x in __________________:

        print(x)

    缺失的语句是:

    A. tag=root.find("p"); tag.children

    B. tag=root.find("p"); tag.child

    C. tag=root.find_all("p"); tag.children

    D. tag=root.find_all("p"); tag.child
     

  50. import numpy as np

    a=np.random.randint(1,3,(2,3))

    print(a)

    结果a是一个2行3列的数组

    A. 正确

    B. 错误

  51. 使用numpy的函数poly1d( )创建多项式y=x^3+〖2x〗^2+3x+4,并将该对象赋值给变量aPoly,求解该多项式的一阶导数bPoly和二阶导数cPoly。通过numpy的arange( )函数创建数组X,做为直角坐标系的横轴,其取值范围是[-20,20]。在同一幅图上按列创建三个子图,分别绘制aPoly、bPoly和cPoly。

    import numpy as np
    import matplotlib.pyplot as plt

    # 创建多项式
    aPoly = np.poly1d([1, 4, 3, 4])
    print("多项式aPoly : ", aPoly)
    # 求一阶导数和二阶导数
    bPoly = aPoly.deriv()
    cPoly = bPoly.deriv()
    # 创建横轴数据
    X = np.arange(-20, 20, 0.1)
    # 绘制图形
    fig, axs = plt.subplots(3, 1, figsize=(10, 10))
    axs[0].plot(X, aPoly(X), label='aPoly')
    axs[0].legend()
    axs[1].plot(X, bPoly(X), label='bPoly')
    axs[1].legend()
    axs[2].plot(X, cPoly(X), label='cPoly')
    axs[2].legend()
    plt.show()

  52.  

    使用numpy包的loadtxt( )函数读取数据文件“ug_detect.csv”的第3、4、5列,分别赋值给变量humidity_str、gas_str和co_str。该数据文件的第一行是列名称,因此在读取的时候,不读取该行,从第二行开始读取。

    采集时间点,温度(?C),相对湿度,瓦斯(m?/min),一氧化碳(m?/min)

    1,30.22,69,2.9,3.6

    2,37.68,2.86,3.64
     

    import numpy as np

    # 使用loadtxt函数读取数据文件,跳过第一行

    data = np.loadtxt('C:/Users/86138/桌面/HYL/数据获取模块/test/ug_detect.csv', delimiter=',', skiprows=1, usecols=(1, 2, 3),encoding="UTF-8")

    # 将第3、4、5列分别赋值给humidity_str、gas_str和co_str变量

    humidity_str = data[:, 0]

    gas_str = data[:, 1]

    co_str = data[:, 2]

  53.  有一个网站有很多图片,要爬取这个网站的所有图片。

    (1)你有什么办法让爬虫程序的效率高一些?
    (2)写出基本的爬虫程序框架结构。
    1.1、使用多线程或异步IO方式进行爬取,以尽可能地利用计算机资源。
    1.2、合理设置请求头和延时,避免被反爬虫机制屏蔽。
    1.3、对于大型图片文件,可以使用分片下载或断点续传等技术,提高下载效率。
    1.4、合理选择爬虫框架和库,例如Scrapy等框架会自动处理并发、反爬虫等问题,能够加快开发速度。

     

     import requests

    from bs4 import BeautifulSoup

    def get_image_urls(url):

        # 发送HTTP请求获取页面内容

        response = requests.get(url)

        # 使用BeautifulSoup解析HTML文档

        soup = BeautifulSoup(response.content, 'html.parser')

        # 从页面中提取所有图片的URL

        urls = []

        for img in soup.find_all('img'):

            urls.append(img['src'])

        return urls

    def download_images(urls):

        # 遍历图片URL列表,逐一下载

        for url in urls:

            # 发送HTTP请求下载图片

            response = requests.get(url)

            # 将图片保存到本地

            with open('image.jpg', 'wb') as f:

                f.write(response.content)

    if __name__ == '__main__':

        # 爬取的网站URL

        url = 'http://example.com'

        # 获取所有图片的URL列表

        urls = get_image_urls(url)

        # 下载所有图片到本地

        download_images(urls)  

  54.  

    有一个班几十名同学的语文、数学、英语成绩,使用Flask创建网站如下:

    import flask

    App=flask.Flask(“web”)

    @app.route(“/”)

    def index():

      S=’’’

    <table border=”1”><td>学号</td><td>姓名</td><td>语文</td><td>数学</td><td>英语</td></tr>

    <tr><td>1001</td><td>张三</td><td>80</td><td>78</td><td>75</td></tr>

    <tr><td>1002</td><td>李四</td><td>78</td><td>88</td><td>79</td></tr>

    <tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr>

    </table>

    ‘’’

    Return s

    App.run()

    完成下面的任务:
    (1)编写爬虫程序爬取所有学生的学号、姓名、语文、数学、英语成绩,并把它们组织在一个DataFrame中。
    (2)使用DataFrame编写程序计算语文、数学、英语的平均成绩。
    (3)使用DataFrame统计语文成绩在[0,60)、[60,80)、[80,100]三个分数段的学生人数,并画出这三个段的人数比例拼图。
    (4)保存DataFrame数据到marks.csv文件。

     

     import requests

    from bs4 import BeautifulSoup

    import pandas as pd

    # 爬取学生成绩数据并组织成DataFrame

    url = "http://url-to-scraped-data"

    response = requests.get(url)

    soup = BeautifulSoup(response.content, 'html.parser')

    rows = soup.find_all('tr')[1:]

    data = []

    for row in rows:

        cols = row.find_all('td')

        cols = [col.text.strip() for col in cols]

        data.append(cols)

    df = pd.DataFrame(data, columns=['学号', '姓名', '语文', '数学', '英语'])

    # 计算语文、数学、英语平均成绩

    chinese_mean = df['语文'].astype(float).mean()

    math_mean = df['数学'].astype(float).mean()

    english_mean = df['英语'].astype(float).mean()

    # 统计分数段人数比例并画图

    bins = [0, 60, 80, 100]

    labels = ['[0,60)', '[60,80)', '[80,100]']

    df['语文分数段'] = pd.cut(df['语文'].astype(float), bins=bins, labels=labels, include_lowest=True)

    counts = df['语文分数段'].value_counts(normalize=True)

    counts.plot(kind='pie')

    # 保存DataFrame到csv文件

    df.to_csv('marks.csv', index=False)  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值