爬虫与云服务器云数据库

news2024/11/15 5:45:47

腾讯云轻量应用服务器+TDSQL-MYSQL数据库+PYTHON做爬虫

实现目标:轻量应用服务器上运行Python爬虫,把数据写到TDSQL-MYSQL数据库中。
最近双十一,趁着这一波福利,在腾讯云购买了一个轻量应用服务器和TDSQL-MYSQL版的数据库。买来之后,想做点什么,在网上找了很多主题,最后还是决定做个爬虫练练手。

后面按照这个顺序介绍
1.腾讯云轻量应用服务器的连接
2.TDSQL-MYSQL数据库连接
3.轻量应用服务器与数据库之间的连接
4.编写爬虫
5.虚拟环境配置

一、腾讯云轻量应用服务器

(一)确认服务器系统版本

点开服务器实例的管理,我的环境用了宝塔linux面板,如果要更换系统,在实例“概要”页面中部有“镜像”,点击重装系统,可以更换系统,非常快。
在这里插入图片描述

(二)确认防火墙打开

在服务器实例概要界面,点击顶部菜单防火墙,查看Llinux登陆22号端口是否是打开的状态。
在这里插入图片描述
在这里插入图片描述

(三)创建服务器登录的密钥

点击左侧轻量应用服务器左边栏“密钥”,新建一个密钥,创建密钥时,选择服务器所在的地域,名个英文名,下载到本地电脑妥善保存。然后绑定实例(绑定轻量云应用服务器那个实例)
在这里插入图片描述

下载的密钥后缀名为*.pem。

(四)使用xshell连接服务器

在XSHELL中新建会话,就填写一个主机(服务器的外网IP),然后切换“用户身份验证”页面,方法选择PublicKey,用户密钥点击浏览,将刚才下载的pem文件倒入进来,以后连接时直接选择这个密钥即可登陆。
在这里插入图片描述
在这里插入图片描述

会话创建完毕后,连接该项服务器。
在这里插入图片描述

直接点击确定,没有密码。出现下图的样式,就是连接完成了。
在这里插入图片描述

二、TDSQLC-MYSQL数据库

(一)使用Navicat连接数据库

购买该项数据库后,系统自动会产生一个实例。
在这里插入图片描述

选择你购买的实例进去,在集群详情页面底部,需要打开外网读写地址,不然navicat没有地方连接。
在这里插入图片描述

在Navicat上新建一个连接,选择“腾讯云-腾讯云数据库mysql版。
在这里插入图片描述

主机就是在刚才打开的数据库外网访问地址。
账号密码可以在下面图片的位置创建或者重置root用户密码
在这里插入图片描述

三、轻量应用服务器与数据库之间的连接

轻量应用服务器与云数据库天生无法互联互通,需要在轻量应用服务器一端建立“内网互联”的功能。在这里建立申请一个。
在这里插入图片描述

在这个位置,关联实例。
在这里插入图片描述

申请可能需要十几分钟,当状态为已连接,说明服务器和数据库在同一网络里面了。

四、写个爬虫

用python3+requests+beautifulsoup4+pymsql来做个爬虫。
直接上代码。并把代码上传到代码仓库当中。

(一)爬虫主体

import random
import requests
from bs4 import BeautifulSoup
import re
from tdmysql import mysqlconn
from datetime import datetime
import time

# 初始网页
url = "http://www.xxxx.cn/xxxx/xxxx.html"


# 获取网页
def getit(urls):
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
    }

    response = requests.request(url=urls, method="get", headers=header)
    html_doc = response.text
    soup = BeautifulSoup(html_doc, 'html.parser')
    # 这个也是为了不得罪人
    delay_seconds = random.randint(1, 10)
    print("延迟%s秒后继续……"%(delay_seconds))
    time.sleep(delay_seconds)
    return soup


# 先拆分结果[结果为: 品种、价格、类别备注]
def split_text(txt):
    split_s = re.compile('[r"\r\n\u3000",:,元/斤,左右,(,)]')
    return split_s.split(txt)


# 在标题里面提取日期
def get_date(txt):
    pattern = r"(\d{1,2}月\d{1,2}日)"
    result = re.search(pattern, txt)
    return result.groups()[0]


# 在标题里面提取地区
def get_address(txt):
    txt = txt.replace("月", "").replace("日", "").replace("/", "").replace("辣椒价格", "").strip()
    pattern = r"([\u4e00-\u9fa5]{2,6})"
    result = re.search(pattern, txt)
    return result.groups()[0]


# 将拆分的结果进行列表化处理 把日期也传入进去
def split_list(ls, data_date, d_address, in_time):
    def pr(price):
        # 如果价格长度超过六个字符,肯定是xx-xx价格区间,所以还要拆一次
        if len(price) > 6:
            split_s = re.compile('-')
            result = split_s.split(price)
        else:
            # 如果价格没有超过六个字符,说明是一口价,不是价格区间。
            result = [price, price]
        return result

    name = ls[4]
    comment = ls[len(ls) - 2]  # 倒数第二个是备注
    a_price = pr(ls[5])
    if comment == "":
        comment = "空"
    return [name, a_price[0], a_price[1], comment, data_date, d_address, in_time]


# 找XX日贵州遵义辣椒价格的标题A标签
url_list = getit(url).find_all('a', {"title": re.compile("日贵州遵义辣椒价格")})

times = 0
TDSQL = mysqlconn()
for i in url_list:
    times += 1
    url2 = i.attrs['href']
    title = i.attrs['title']
    d_date = get_date(title)
    d_address = get_address(title)
    insert_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    response = getit(url2).find_all(text=re.compile("元/斤"))
    empty_list = []
    for j in response:
        x = split_text(j)
        rrr = split_list(x, d_date, d_address, insert_time)
        # 先转为元组,后用列表包裹。
        r_tuple = tuple(rrr)
        empty_list.append(r_tuple)
    TDSQL.ldb(empty_list)

	# 这个是为了不得罪人写的
    if times == 5:
        break

(二)数据库连接

import pymysql


class mysqlconn:

    def __init__(self):
        self.dbuser = 'root'
        self.dbpwd = '密码'
        self.conn = pymysql.connect(host='数据库内网访问地址',
                                    user=self.dbuser,
                                    password=self.dbpwd,
                                    port=3306,
                                    charset='utf8mb4')

    # 检查数据库与表是否完整
    def check(self):
        conn = self.conn
        cursor = conn.cursor()
        try:
            cursor.execute("use testing;")
            print("数据库连接成功")
        except Exception as e:
            print(e)
        finally:
            cursor.close()
            conn.close()

    def ldb(self, content):
        conn = self.conn
        cursor = conn.cursor()
        tablename = 'peppermarketing'
        s_content = content
        # 构造sql语句
        insert_sql = "REPLACE INTO peppermarketing VALUES(%s,%s,%s,%s,%s,%s,%s)"
        print(insert_sql)
        try:
            cursor.execute('use testing;')
            cursor.executemany(insert_sql, s_content)
            conn.commit()

            print('%s入库成功' % tablename)
        except Exception as e:
            # 万一失败了,要进行回滚操作
            print('入库失败,因为%s' % e)
            conn.rollback()




五、配置虚拟环境。

1.Xshell中输入命令 “pip3 install pipenv” 安装pipenv
2.“mkdir test3” 建立文件夹
3.进入test3 文件夹,初始化特定版本的环境输入“pipenv --python 3.6” (可选,如果不初始,则跟随系统)
4.输入命令 pipenv install 开始安装虚拟环境
5.安装完毕后输入命令 pipenv shell 进入虚拟环境,前面有”(xxx)”即代表进入了虚拟环境。
在这里插入图片描述

6.用了“pipenv install + 包名” 这种命令安装了所需要的包。
7.包安装完毕,拉取代码。拉取代码的方法和部署公钥查看gitee即可。
8.在xshell中运行程序,python3 hohoho.py
在这里插入图片描述

使用Navicat查看爬取的数据
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenGL学习

1.1,状态机-上下文-对象 GPU渲染流程 OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。 状态机:变量(描述该如何操作)的大集合 OpenGL的状态通常被称为OpenGL上下文(Contex…

异构图注意力网络Heterogeneous Graph Attention Network ( HAN )

文章目录前言一、基础知识1.异构图(Heterogeneous Graph)2.元路径3.异构图注意力网络二、异构图注意力网络1.结点级别注意力(Node-level Attention)2.语义级别注意力(Semantic-level Attention)总结前言 异…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城?这三个功能要会用! 1.定期低价秒杀,提高商城流量 除了通过私域流量裂变,低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头,在情人节、38妇女节、中秋国庆、七夕节等日子&…

前端框架 Nuxtjs Vue3 SEO解决方案 SSR

目录 一、Nuxtjs安装 二、路由规则 三、公共布局 四、Vue3中TypeScript的使用 一、Nuxtjs安装 参考&#xff1a;Installation Get Started with Nuxt安装 - NuxtJS | Nuxt.js 中文网Installation Get Started with Nuxt yarn create nuxt-app <项目名> 项目运行…

GAMES101 作业0 环境配置 PC下简单配置i

前言 GAMES101提供了计算机图形学相关教学知识&#xff0c;闫教授及其团队也为大家准备了相应课程作业。课程作业部署在虚拟机上&#xff0c;以便免去环境部署的麻烦。但对于一些同学来说&#xff0c;还是希望直接在WIN的VS上使用并编码&#xff0c;本文对此进行简单说明。 环…

神经网络和深度学习-后向传播back propagation

后向传播back propagation 首先我们要了解&#xff0c;前向传播&#xff0c;损失函数这些前置知识&#xff0c;下面我们给出一张神经网络的图 反向传播通过导数链式法则计算损失函数对各参数的梯度&#xff0c;并根据梯度进行参数的更新 下面举个简单的例子 我们需要知道x,y,…

Linux C网络通信过程

socket函数、sockaddr_in结构体 和 bind函数 socket函数的作用是创建一个网络文件描述符&#xff0c;程序通过这个文件描述符将数据发送到网络&#xff0c;也通过这个文件描述符从网络中接受数据。观察一下socket函数&#xff1a; int listenfd; listenfd socket(AF_INET, S…

NNDL 作业11:优化算法比较

目录 1. 编程实现图6-1&#xff0c;并观察特征 2. 观察梯度方向 3. 编写代码实现算法&#xff0c;并可视化轨迹 4. 分析上图&#xff0c;说明原理&#xff08;选做&#xff09; 5. 总结SGD、Momentum、AdaGrad、Adam的优缺点&#xff08;选做&#xff09; 6. Adam这么好&…

Python威布尔分布

文章目录威布尔分布及其性质在Python中生成威布尔分布的随机数指数分布和拉普拉斯分布的对比威布尔分布及其性质 威布尔分布&#xff0c;即Weibull distribution&#xff0c;又被译为韦伯分布、韦布尔分布等&#xff0c;是仅分布在正半轴的连续分布。 在numpy.random中&#…

python中urllib库的使用

1. 获取目标页面的源码 以获取百度页面源码为例 #使用urllib获取百度首页的源码 import urllib.request#1 定义一个url 作为需要访问的网址 url http://www.baidu.com#2 模拟浏览器向服务器发送请求 response响应 response urllib.request.urlopen(url)#3 获取响应中的页面…

Monkey测试

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流&#xff08;如按键输入、触摸屏输入、手势输入等&#xff09;&#xff0c;实现对应用程序客户端的稳定性测试&#xff1b;通俗来说&#xff0c;Monkey 测试即“猴子测试”&#xff0c;是指像猴子一样&a…

JVM垃圾回收算法整理

JVM垃圾回收算法整理前言关键概念了解标记–清除算法复制算法标记–整理算法分代收集算法仰天大笑出门去&#xff0c;我辈岂是蓬蒿人前言 大概内容&#xff1a; jvm垃圾回收算法&#xff1a; 1、“标记–清除”算法&#xff1b;首先标记出所有需要被回收的对象&#xff0c;然…

搭建自己的SSR

Vue SSR介绍 是什么 官方文档&#xff1a;https://ssr.vuejs.org/Vue SSR&#xff08;Vue.js Server-Side Rendering&#xff09; 是 Vue.js 官方提供的一个服务端渲染&#xff08;同构应用&#xff09;解 决方案使用它可以构建同构应用还是基于原有的 Vue.js 技术栈 官方文档…

XXL-JOB逻辑自测及执行参数配置踩坑

概述 关于XXL-JOB的使用遇到的问题记录。对XXL-JOB不熟的&#xff0c;可以先参考分布式任务调度平台XXL-JOB深度实战 实战 业务DTO定义如下&#xff1a; Data public class AdAccountDTO {private String accountId;/*** yyyy-MM-dd HH:mm:ss*/private String startCreateT…

ThingBoard源码解析-缓存

配置 TB支持两种缓存&#xff1a;Caffeine和Redis,通过配置cache.type来指定使用哪种缓存。 位于 org.thingsboard.server.cache Caffeine 配置类&#xff1a;CaffeineCacheConfiguration Configuration ConditionalOnProperty(prefix "cache", value "t…

HTML CSS 个人网页设计 WEB前端大作业代码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【计算机毕业设计】7.线上花店系统maven源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着互联网突飞猛进的发展及其对人们的生活产生至关重要的影响&#xff0c;线上购花&#xff0c;送货到家的购物方式受到了越来越多顾客的接受与喜爱。线上花卉小铺的设计与实现不仅可以带来更广泛的选择与实…

餐饮业如何现业绩突破性增长?

疫情反复无常&#xff0c;餐饮人每天都面临着极大的挑战&#xff1a;无法预测的关店通知、突如其来的禁止堂食命令......餐饮店客流减少&#xff0c;业绩下滑成为不可避免的趋势。 在这种情形下&#xff0c;不少餐饮老板拒绝“躺平”&#xff0c;上演“花式自救”&#xff1a;…

cpu设计和实现(数据预取)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面说过了一条指令经过cpu处理的时候需要经历几个阶段。通过实验&#xff0c;我们发现&#xff0c;哪怕是再简单的ori指令也要经历取指、译码、执…

MyBatis是什么?使用方式?

目录 前言&#xff1a; 一、概念讲述 1.什么是MyBatis&#xff1f; 2.官网网址 二、使用方式 1.pom.xml里面添加依赖包 2.新建统一配置文件&#xff08;俗称数据库连接文件&#xff09; 3.新建立映射文件 &#xff08;俗称数据库表对应xml&#xff09; 4.建立数据库表…