猫眼数据sqlite保存
这里主要是对sqlite数据库保存架构的摸索
import requests
from requests import request, session, RequestException
import re
import sqlite3
# 使用GET请求到网站的html文件,正则表达式提取,保存为txt文件,
# 循环订立在大框架中
def main():
parse_data = parse_one_page() # 获取的全部数据
print(parse_data)
dbpath = '猫眼.db' # 定义一个db文件
save_dataDB(parse_data,dbpath) # 保存为sqlite文件
return #
# 抓取数据
def get_one_page(baseurl):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
}
response = requests.get(url=baseurl, headers=headers)
if response.status_code == 200: # 判断访问状态码,200代表正常访问
return response.text # 返回抓取到的数据
return None
except RequestException: # 报错则返回空数据
return None
# 解析数据
def parse_one_page():
url = 'https://maoyan.com/board/4?offset=' # 猫眼网站
datalist = [] # 定义一个接收全部数据的列表
for i in range(0,10):
baseurl = url + str(i * 10) # 拼接url
html = get_one_page(baseurl) # 使用拼接的url去请求数据
print(baseurl)
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S) # 使用正则表达式解析,创建一个格式模板
items = re.findall(pattern, html) # 将模板套入对象
for item in items:
list = [] # 定义一个接收每一次循环数据的列表
index = item[0] # 排名
list.append(index)
image = item[1] # 图片链接
list.append(image)
title = item[2] # 电影名字
list.append(title)
actor = item[3] # 演员们
list.append(actor)
time = item[4] # 上映时间
list.append(time)
score = item[5].strip() + item[6].strip() # 评分(实际上是两个数字的拼接)
list.append(score)
datalist.append(list) # 将每一次循环的数据保存到总列表中
return datalist
def save_dataDB(parse_data,dbpath):
save_data02(dbpath) # 创建数据库
conn = sqlite3.connect(dbpath) # 连接数据库
cur = conn.cursor()
for data in parse_data:
for index in range(len(data)):
if index == 0 or index == 5: # 将数字区分
continue
data[index] = '"' + data[index] + '"' # 使用“ ”区别数据
# print(data)
sql = """
insert into cat_eye(
"index",image,title,actor,time,score)
values(%s)""" %",".join(data)
print(sql)
cur.execute(sql)
conn.commit()
conn.close()
def save_data02(dbpath):
sql = '''
create table cat_eye
(
id integer
primary key autoincrement,
"index" varchar,
image text,
title varchar,
actor text,
time integer,
score numeric
);
'''
conn = sqlite3.connect(dbpath)
cursor = conn.cursor()
cursor.execute(sql)
conn.commit()
conn.close()
if __name__ == '__main__':
main()
print("爬取完毕!!!")
execute(sql)
conn.commit()
conn.close()
if name == ‘main’:
main()
print(“爬取完毕!!!”)