随笔 - 6  文章 - 0  评论 - 2  阅读 - 189 

作业①

要求:

熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内
容。

使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、
“深证 A 股”3 个板块的股票数据信息。

候选网站:东方财富网http://quote.eastmoney.com/center/gridlist.html#hs_a_board

输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号
id,股票代码:bStockNo……,由同学们自行定义设计表头:
Gitee 文件夹链接为:https://gitee.com/tiantianmi/crawl_project/blob/master/作业4/stock.py

实验代码:

点击查看代码
import sqlite3

import options as options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)

url = 'http://quote.eastmoney.com/center/gridlist.html#hs_a_board'
driver.get(url)
conn = sqlite3.connect('work4.db')
cursor = conn.cursor()
#删除已有表
cursor.execute("DROP TABLE IF EXISTS stock3")

cursor.execute('''CREATE TABLE IF NOT EXISTS stock3
                  (serial_no INTEGER, code TEXT, name TEXT, latest_price REAL,
                   change_percent REAL, change_amount REAL, volume INTEGER, amount REAL,
                   amplitude REAL, highest REAL, lowest REAL, today_open REAL, yesterday_close REAL)''')


# page = driver.find_elements(By.XPATH, '//span[@class="paginate_page"]//a')

def spider(driver):
    driver.get(url=url)
    getdata(driver)
    for i in range(2, 4):
        button = driver.find_element(By.XPATH, '//div[@id="tab"]/ul/li[' + str(i) + ']')
        print("翻页")
        button.click()
        time.sleep(1.5)
        getdata(driver)
        # name = driver.find_elements(By.XPATH, '//tbody/tr/td[3]')
        # for i in range(len(name)):
        #     print(name[i].text)


def getdata(driver):
    try:
        number = driver.find_elements(By.XPATH, '//tbody/tr/td[1]')
        code = driver.find_elements(By.XPATH, '//tbody/tr/td[2]')
        name = driver.find_elements(By.XPATH, '//tbody/tr/td[3]')
        latest_price = driver.find_elements(By.XPATH, '//tbody/tr/td[5]')
        change_percent = driver.find_elements(By.XPATH, '//tbody/tr/td[6]')
        change_amount = driver.find_elements(By.XPATH, '//tbody/tr/td[7]')
        volume = driver.find_elements(By.XPATH, '//tbody/tr/td[8]')
        amount = driver.find_elements(By.XPATH, '//tbody/tr/td[9]')
        amplitude = driver.find_elements(By.XPATH, '//tbody/tr/td[10]')
        highest = driver.find_elements(By.XPATH, '//tbody/tr/td[11]')
        lowest = driver.find_elements(By.XPATH, '//tbody/tr/td[12]')
        today_open = driver.find_elements(By.XPATH, '//tbody/tr/td[13]')
        yesterday_close = driver.find_elements(By.XPATH, '//tbody/tr/td[14]')
        for i in range(len(name)):
            d = (number[i].text, code[i].text, name[i].text, latest_price[i].text, change_percent[i].text,
                 change_amount[i].text, volume[i].text, amount[i].text, amplitude[i].text, highest[i].text,
                 lowest[i].text, today_open[i].text, yesterday_close[i].text)
            cursor.execute("INSERT INTO stock3 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", d)
            conn.commit()
        print("存储成功")
    except Exception as err:
        print(err)


spider(driver)

driver.close()

运行结果:

“沪深 A 股”:

“上证 A 股”:

“深证 A 股”:

心得体会:

本次实验大体上和之前相似,不同的是加入了不同板块的读取,可以选择click来进行选择翻页进行不同板块的爬取。对数据库的存储和数据的爬取更加顺利了。比之前的代码增加了如果存在表就进行删除,防止每一次运行数据库就会加入一次数据。

实验二

实验内容
要求:熟练掌握Selenium查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)候选网站:中国 mooc 网:https://www.icourse163.org
**输出信息: **MYSQL 数据库存储和输出格式
Gitee文件夹链接:
https://gitee.com/tiantianmi/crawl_project/blob/master/作业4/mooc.py

代码实现:

点击查看代码
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 sqlite3

# 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度
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"
# 声明一个list,存储dict
data_list = []

conn = sqlite3.connect('work4.db')
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS mooc")

cursor.execute('''
    CREATE TABLE IF NOT EXISTS mooc (
        cCourse TEXT,
        cCollege TEXT,
        cTeacher TEXT,
        cTeam TEXT,
        cCount TEXT,
        cProcess TEXT,
        cBrief TEXT
    )
''')


def start_spider():
    # 请求url
    browser.get(url)
    # 显示等待商品信息加载完成
    time.sleep(2)
    # 手机号登录
    print("登陆中")
    browser.switch_to.frame(browser.find_element(By.XPATH,"//div[@class='ux-login-set-container']//iframe"))
    time.sleep(2)
    browser.switch_to.frame(browser.find_element(By.XPATH, "//div[@class='ux-login-set-container']//iframe"))
    browser.find_element(By.XPATH, "//input[@class='dlemail j-nameforslide']").send_keys("13323768117")  # 输入账号
    browser.find_element(By.XPATH, '//input[@placeholder="请输入密码"]').send_keys("Aa1234567")  # 输入密码
    print("登录")
    browser.find_element(By.XPATH, ".//div[@class='u-baseinputui']/input[@type='text']").send_keys(
        "python")  # 输入要找的课程
    print("搜索")
    browser.find_element(By.XPATH,
                         '//div[@class="u-search-icon"]/span[@class="u-icon-search2 j-searchBtn"]').click()  # 点击搜索
    time.sleep(2)
    print(1)
    datalist = browser.find_elements(By.XPATH, "//div[@class='cnt f-pr']")
    time.sleep(2)

    for data in datalist:
        try:
            # 获取各项数据
            cCource = data.find_element(By.XPATH, "./div[@class='t1 f-f0 f-cb first-row']").text
            cCollege = data.find_element(By.XPATH, ".//a[@class='t21 f-fc9']").text
            cTeacher = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
            cTeam = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
            cCount = data.find_element(By.XPATH, ".//span[@class='hot']").text
            cProcess = data.find_element(By.XPATH, ".//span[@class='txt']").text
            cBrief = data.find_element(By.XPATH, ".//span[@class='p5 brief f-ib f-f0 f-cb']").text

            # 将数据插入到MySQL数据库中
            cursor.execute(
                "INSERT INTO mooc VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
                (cCource, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief)
            )
            conn.commit()
        except Exception as err:
            print(err)


def main():
    start_spider()


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

运行结果:

心得体会:

本次实验主要卡住我的点是要进行模拟用户登录,易错的地方是iframe的部分,首先要确认登录页面是否已经切换到了正确的 iframe 中,还有当页面进行切换的时候需要等待,否则就爬取不到数据等等。对数据的爬取,数据的查看更加顺手了。

作业③:

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

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

环境搭建
任务一:开通MapReduce服务
实时分析开发实战:
任务一:Python脚本生成测试数据
任务二:配置Kafka
任务三:安装Flume客户端
任务四:配置Flume采集数据
输出:实验关键步骤或结果截图。

结果截图:

任务一:开通MapReduce服务

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

任务二:配置Kafka

任务三:安装Flume客户端



任务四:配置Flume采集数据

心得体会

对着word一步步做,对Xshell和Xftp有了一些粗略的了解,虽然一开始很陌生,但慢慢的也做完了。就是华为云每次都需要释放,要一次性做完真的很难受。

posted on   tiantianmimi  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示