爬虫与云服务器云数据库
创始人
2024-02-12 13:44:55
0

腾讯云轻量应用服务器+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.textsoup = 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 resultname = 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 += 1url2 = 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 pymysqlclass 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.conncursor = 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.conncursor = 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查看爬取的数据
在这里插入图片描述

相关内容

热门资讯

自我成长的分析报告 自我成长的分析报告(精选11篇)  在现在社会,报告使用的频率越来越高,不同的报告内容同样也是不同的...
企业账户服务自查报告 企业账户服务自查报告范文  时间稍纵即逝,辛苦的工作已经告一段落了,回顾这一段时间存在的工作问题,是...
对员工工作评价 对员工工作评价范文对员工工作评价范文1对员工工作评价范文1.普通员工(不是太聪明)2.格外出色(目前...
青少年心理健康现状调查报告 青少年心理健康现状调查报告(通用16篇)  当想知道某一情况、某一事件的来龙去脉时,我们有必要弄明白...
市场分析报告怎么写 市场分析报告怎么写3篇  在现实生活中,报告使用的次数愈发增长,报告具有成文事后性的特点。写起报告来...
超市临时工社会实践报告 超市临时工社会实践报告  在寒暑假的时候有很多的学生都会在超市开展社会实践,那么超市社会实践报告怎么...
主任述职报告 主任述职报告(精选13篇)  在现实生活中,我们使用报告的情况越来越多,我们在写报告的时候要避免篇幅...
企业总经理年度述职报告 企业总经理年度述职报告(通用10篇)  我们在某个岗位上工作一段时间之后,需要通过述职的方式对自己前...
行业分析报告 行业分析报告(精选14篇)  随着社会一步步向前发展,报告十分的重要,报告具有语言陈述性的特点。那么...
成本会计实训报告 成本会计实训报告  实习目的:了解成本核算的基本程序,熟练运用各种成本计算方法,提高成本核算的实际操...
“家乡文化”调研检测报告 “家乡文化”调研检测报告  调查时间:  我的家乡西安是华夏文明的发祥地,是一座历史悠久的文化名城,...
“三级联创”工作汇报 -工作... “三级联创”工作汇报 -工作报告范文 相台办事处党建三级联创工作情况汇报2...
广州居民幸福感调查报告 2016年广州居民幸福感调查报告  在广州生活,谁最幸福?自去年调查得出“男人比女人幸福,丧偶的比已...
药品采购自查报告 药品采购自查报告  随着人们自身素质提升,越来越多人会去使用报告,报告成为了一种新兴产业。写起报告来...
如何写好述职报告 如何写好述职报告  导语:如果把问题找的准确,能够很好地吸取经验教训,在述职当中会得到领导与群众的高...
高中学生自我陈述报告 高中学生自我陈述报告范文600字(通用5篇)  随着个人的文明素养不断提升,报告有着举足轻重的地位,...
大学生顶岗实习月报 大学生顶岗实习月报范文  一段时间的实习生活又接近尾声,这段时间里,一定有很多值得分享的经验吧,这时...
暑假调查报告 精选暑假调查报告4篇  在不断进步的时代,我们都不可避免地要接触到报告,不同种类的报告具有不同的用途...
毕业生自我陈述报告 毕业生自我陈述报告800字(精选20篇)  在当下社会,大家逐渐认识到报告的重要性,报告成为了一种新...
寒假社会实践报告 寒假社会实践报告精选15篇  随着个人的素质不断提高,需要使用报告的情况越来越多,其在写作上具有一定...