首页 > 其他分享 >数据采集与融合技术实践四

数据采集与融合技术实践四

时间:2023-11-08 18:22:28浏览次数:36  
标签:XPATH 实践 text class 融合 element 采集 find browser

第四次作业

一、作业内容

作业①:

要求:

熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
候选网站:东方财富网:http://quote.eastmoney.com/center/gridlist.html#hs_a_board

输出信息:MYSQL数据库存储和输出格式如下,表头应是英文命名例如:序号id,股票代码:bStockNo……,由同学们自行定义设计表头:

Gitee文件夹链接
Git文件夹

序号 股票代码 股票名称 最新报价 涨跌幅 涨跌额 成交量 成交额 振幅 最高 最低 今开 昨收
1 688093 N世华 28.47 62.22% 10.92 26.13万 7.6亿 22.34 32.0 28.08 30.2 17.55
2......

点击查看代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import requests
import threading
import time
import urllib

import pymysql
chrome_options = Options()
chrome_options.add_argument('--headless')  #设置启动时不可见
chrome_options.add_argument('--disable-gpu')  #设置不使用GPU加速
  #使用此方法访问页面
# locator = (By.XPATH, '//*[@id="key_S"]')
# WebDriverWait(driver, 10,0.5).until(EC.presence_of_element_located(locator))  #等待输入框加载完成
# key = driver.find_element(By.XPATH,'//*[@id="key_S"]').send_keys("书包")   #找到输入框,并输入书包
# Button = driver.find_element(By.XPATH,'//input[@class="button"]').click() #寻找搜索按钮并点击
count=0 #这个变量用来控制爬取的数目
Name = []  #存储商品的名称
Price = []  #存储商品的价格
Url = []   #存储图片的URL

def gerDriver(i):
    key = ["hs", "sh", "sz"]
    keyword = urllib.parse.quote(key[i])
    driver = webdriver.Chrome(options=chrome_options)  # 创建Chrome浏览器
    url = f"http://quote.eastmoney.com/center/gridlist.html#{keyword}_a_board"
    driver.get(url)
    return driver

def getUrl(j):
    driver = gerDriver(j)
    global count
    for i in range(70):
        js = 'window.scrollTo(0,%s)' % (i * 100)  # js脚本
        driver.execute_script(js)
    lists = driver.find_element(By.XPATH,"//tbody")
    list = lists.find_elements(By.XPATH,"./tr")

    # print(list)
    print("序号\t股票代码\t股票名称\t最新报价\t涨跌幅\t涨跌额\t成交量\t成交额\t振幅\t\t最高\t\t最低\t\t今开\t\t昨收")
    for i in list:
        if(count > 114):
            return
        column = i.find_elements(By.XPATH,"td")
        no  = column[0].text
        code = column[1].text
        name = column[2].text
        lastprice = column[4].text
        upf = column[5].text
        upe = column[6].text
        okl = column[7].text
        oke = column[8].text
        af = column[9].text
        high = column[10].text
        low = column[11].text
        today = column[12].text
        yesterday = column[13].text
        print(no+ "\t" + code + "\t" + name + "\t" + lastprice+ "\t" + upf+ "\t" + upe + "\t" + okl + "\t" + oke+ "\t",end ='')
        print(af + "\t" +high+ "\t" + low + "\t" + today + "\t" + yesterday)

        conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="admin123", db="my_db_01",
                               charset="utf8")
        # 获取游标
        cursor = conn.cursor()
        # 插入数据,注意看有变量的时候格式
        try:
            cursor.execute(
                "INSERT INTO stock(`序号`,`股票代码`,`股票名称`,`最新报价`,`涨跌幅`,`涨跌额`,`成交量`,`成交额`,`振幅`,`最高`,`最低`,`今开`,`昨收`) "
                                "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
                (no,code,name,lastprice,upf,upe,okl,oke,af,high,low,today,yesterday))
            # 提交
        except Exception as err:
            print("error is ")
            print(err)
            # 关闭连接
        conn.commit()
        conn.close()



        # name = i.find_element(By.XPATH,'./td[@class="mywidth"]/a').text
        # price = i.find_element(By.XPATH,'./p[@class="price"]/span').text

        # print(name)
        # Name.append(name)
        # Price.append(price)
for i in range(0,3):
    getUrl(i)
    # if(i < 3):
    #     next = driver.find_element(By.XPATH,'//a[@class="next paginate_button"]')
    #     next.click()
# for i in range(0,len(Name)):
#     print(Name[i] + Price[i])

码云链接

结果截图

心得体会

这道题目就相对而言比较简单,和上次的实验没有很大的出路,基本一个套路就可以解决

作业②:

要求:

熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:中国mooc网:https://www.icourse163.org

输出信息:MYSQL数据库存储和输出格式

Gitee文件夹链接
Git文件夹

Id cCourse cCollege cTeacher cTeam cCount cProcess cBrief
1 Python数据分析与展示 北京理工大学 嵩天 嵩天 470 2020年11月17日 ~ 2020年12月29日 “我们正步入一个数据或许比软件更重要的新时代。——Tim O'Reilly” ……
2......

点击查看代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import random
import pymysql

# 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
browser = webdriver.Chrome(options=options)
url = "https://www.icourse163.org/search.htm?search=%E5%A4%A7%E6%95%B0%E6%8D%AE#/"
# 声明一个list,存储dict
data_list = []

# # QQ登录过程
# going1 = browser.find_element(By.XPATH,'//a[@class="f-f navLoginBbtn"]').click()
# going2 = browser.find_element(By.XPATH,'//span[@class="f-ib icon last-login-holder"]').click()
# going3 = browser.find_element(By.XPATH,'//a[@class="link"]').click()
#
# user = browser.find_element(By.XPATH,'//input[@type="text"]')
# password = browser.find_element(By.XPATH,'//input[@type="password"]')
# user.send_keys('账号')
# password.send_keys('密码')
# submit = browser.find_element(By.XPATH,'//input[@submit]')

#慕课使用手机账号密码登录



def start_spider():
    # 请求url
    browser.get(url)
    going = browser.find_element(By.XPATH,'//a[@class="f-f0 navLoginBtn"]').click()
    time.sleep(3)
    temp_iframe_id = browser.find_element(By.XPATH, "//div[@class='ux-login-set-container']//iframe")
    browser.switch_to.frame(temp_iframe_id)
    account = browser.find_element(By.XPATH,'//input[@type="tel"]')
    password = browser.find_element(By.XPATH,'//input[@class="j-inputtext dlemail"]')
    account.send_keys("your telephone")
    password.send_keys("your password")
    into = browser.find_element(By.XPATH,'//a[@id="submitBtn"]').click()
    # 显示等待商品信息加载完成
    WebDriverWait(browser, 1000).until(
        EC.presence_of_all_elements_located(
            (By.ID, "j-courseCardListBox")
        )
    )
    # 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来
    browser.execute_script('document.documentElement.scrollTop=10000')
    # 随机延迟,等下元素全部刷新
    time.sleep(random.randint(3, 6))
    browser.execute_script('document.documentElement.scrollTop=0')

    # 开始提取信息,找到ul标签下的全部li标签
    count = 0
    for link in browser.find_elements(By.XPATH,'//div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]'):
        count += 1
        # 课程号
        #  course_id = link.find_element_by_xpath('.//div[@class="p-name"]//em').text
        # 课程名称
        course_name = link.find_element(By.XPATH,'.//span[@class=" u-course-name f-thide"]').text
        print("course name ", course_name)
        school_name = link.find_element(By.XPATH,'.//a[@class="t21 f-fc9"]').text
        print("school ", school_name)
        # 主讲教师
        m_teacher = link.find_element(By.XPATH,'.//a[@class="f-fc9"]').text
        print("laoshi:", m_teacher)
        # 团队成员
        try:
            team_member = link.find_element(By.XPATH,'.//span[@class="f-fc9"]').text
        except Exception as err:
            team_member = 'none'
        # print("团队:",team_member)
        # 参加人数
        join = link.find_element(By.XPATH,'.//span[@class="hot"]').text
        join.replace('参加', '')
        print("参加人数", join)
        # 课程进度
        process = link.find_element(By.XPATH,'.//span[@class="txt"]').text
        print('jingdu ', process)
        # 课程简介
        introduction = link.find_element(By.XPATH,'.//span[@class="p5 brief f-ib f-f0 f-cb"]').text
        print(introduction)

        conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="admin123", db="my_db_01", charset="utf8")
        # 获取游标
        cursor = conn.cursor()
        # 插入数据,注意看有变量的时候格式
        try:
            cursor.execute(
                "INSERT INTO mooc (`id`,`course`,`college`,`teacher`,`team`,`count`,`process`,`brief`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
                (str(count), course_name, school_name, m_teacher, team_member, join, process, introduction))
            # 提交
        except Exception as err:
            print("error is ")
            print(err)
            # 关闭连接
        conn.commit()
        conn.close()

        # 遍历


def main():
    start_spider()


if __name__ == '__main__':
    main()
    # 退出浏览器
    browser.quit()


码云链接

结果截图

心得体会

这道题的难度就比较大,然后的话还要模拟登陆的过程,这里面就要涉及到由于点击登录后,会产生新的界面,所以需要找到iframe这个来进入登录界面。

作业③:

要求:

掌握大数据相关服务,熟悉Xshell的使用

完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。

环境搭建:

任务一:开通MapReduce服务

实时分析开发实战****:

任务一:Python脚本生成测试数据

任务二:配置Kafka

任务三: 安装Flume客户端




任务四:配置Flume采集数据

心得体会

这个就按照教程做,不过第一次搞这个比较生疏,做的就比较慢和吃力

标签:XPATH,实践,text,class,融合,element,采集,find,browser
From: https://www.cnblogs.com/jk-ing/p/17818053.html

相关文章

  • 企业级通用CMDB设计最佳实践
    由于企业运维场景各异,开源CMDB要能满足运维的需求,通用灵活、简单易用是必要条件。因此,要实现一个尽可能通用、灵活、可扩展的运维资源数据的配置和管理系统,系统至少要满足:1.运维人员能根据企业的运维场景和需求,自己去构建存储的数据模型,以及模型之间的关系2.提供极简API,尤其是在数......
  • 河北银行基于平台工程的研发效能平台研究与实践
    近日,《金融电子化》杂志刊物(2023年9月上半月刊)发刊,在技术应用专栏中,由河北银行信息科技部研发效能项目组撰写的文章《基于平台工程的研发效能平台研究与实践》刊登在内。文章主要阐述在央行《金融科技发展规划(2022-2025年)》指导下,河北银行参照业界领先理念,打造一体化的祝融开发平台......
  • 应急电源车:车载UPS系统如何进行数据采集远程监控
    随着电力需求的日益增长,不仅需要大规模的电厂来满足日常生产、生活的需要,而且还要在重要场所、灾害现场等环境中,随时准备备用电源来更好地面对突发状况,应急电源车便是这一类型的特种车辆。 UPS应急电源车是一种搭载UPS系统的特种车辆,能够为特殊场合提供稳定、可靠、不间断电源,一般......
  • NodeMananger弹性资源池实践
    1.背景在离线集群中,有些冷数据集群专用于存放HDFS数据,很少用来提供计算操作,这些机器的计算资源都浪费了,它们的典型特征是:只启动datanode服务,不启动nodemanager服务。为了提高这些机器的资源利用率,希望在其他计算集群需要资源的时候,resourcemanager可以在冷数据集群中启动NodeMana......
  • 杭州悦数出席 2023 云栖大会计算巢专场,分享云上最佳实践
    2023云栖大会于10月31日至11月2日在杭州盛大召开,本届大会由杭州市人民政府、浙江省经济和信息化厅以及阿里巴巴集团共同主办。本次大会主题涵盖算力、人工智能+、产业创新三大主题,吸引了全球44个国家和地区的8万多名从业者参会。作为阿里云计算巢平台的代表服务商,杭......
  • Gartner亚太区报告:浪潮云海超融合第一阵营唯一逆势增长,雄踞前三
    近日,Gartner 发布《2023H1 全球数据中心硬件集成系统市场数据》,数据显示,2023年上半年亚太区超融合市场整体销售额8.66亿美元(63.36 亿元人民币),同比下降10.3%,浪潮云海超融合在第一阵营唯一逆势同比增长2.8%,市场份额雄踞前三。凭借领先的产品竞争力、覆盖亚太的营销服务体系、全球......
  • 简单实现Python采集B站视频
    我们今天要学习的是如何利用Python的requests库编写一个采集B站的小爬虫,都是一些很基础的内容,简单易学,没有什么太过复杂的东西,一起来看看吧。首先安装库:```bashpipinstallrequests```然后,我们可以开始编写爬虫程序:```pythonimportrequestsproxy_host='www.duoip.cn'proxy_......
  • Python采集抖音快手商户
    抖音快手不仅是一个短视频平台,而且也是当下很多商家争抢进场的热门电商平台,以下是一个用Python实现采集抖音快手的爬虫程序,用于采集抖音快手的商家,对于做竞品同行数据分析来说,一定非常不错的。```pythonimportrequestsfrombs4importBeautifulSoup#请求URLurl='https://ww......
  • R语言实现抖音达人数据采集
        抖音是近些年最火爆的短视频平台,今天我们试着用R语言编写一个采集大人数据的程序,必须保证安装rvest和proxyr,一起来看看吧。```rinstall.packages("rvest")install.packages("proxyr")```然后,你需要在R中声明代理信息。这可以通过`proxyr::proxy`函数完成。```rlibra......
  • Python和requests库结合采集豆瓣短评
    Python是一种常用的程序语言,今天我们就用Python和requests库结合,来写一个采集豆瓣短评的程序,非常的简单,一起来学学吧。```pythonimportrequestsfrombs4importBeautifulSoup#设置代理proxy=f'http://{proxy_host}:{proxy_port}'headers={'User-Agent':'Mozilla/5.......