# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
from xbot import web
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import time
import pymysql
import re
import math
import xbot.web
# 提交人 换成自己的名字,file_path设置成自己的文本路径 编码问题
def main(args):
pass
file_path = r'C:\Users\1111\Desktop\测试 (2).txt'
def data():
'''获取数据'''
web_page = xbot.web.create(url="https://www.endata.com.cn/BoxOffice/BO/History/Movie/Alltimedomestic.html")
fanye = web_page.find_by_xpath('//*[@id="layui-laypage-1"]').children()
count = 0
for i in fanye:
if i.get_text().isdigit():
count += 1
for i in range(int(count) + 1):
i = i+1
quanbu = web_page.find_all_by_xpath('//tbody/tr/td/a')
for suoyin,dys in enumerate(quanbu):
ab = dys.get_attribute('href')
ss = 'https://www.endata.com.cn' + ab
# print(ab)
web_dg = xbot.web.create(url=ss)
time.sleep(3)
g = r'(//*[@id="mv-Basic"]/dd[{}]/a)'.format(suoyin+1)
名字 = web_dg.find_by_xpath('//*[@id="Minfo"]/div[2]/div[2]/div[1]/h3').get_text()
try:
# 尝试使用第一个XPath表达式获取票房数据
导演s = web_dg.find_by_xpath(g).get_text()
票房 = web_dg.find_by_xpath('//*[@id="Minfo"]/div[2]/div[2]/div[1]/div/div/strong').get_text()
except Exception:
try:
# 如果第一个XPath表达式失败,尝试使用第二个XPath表达式
导演s = web_dg.find_by_xpath('//*[@id="mv-Basic"]/dd[1]/a').get_text()
票房 = web_dg.find_by_xpath('//*[@id="Minfo"]/div[2]/div[2]/div[1]/div/div[2]/strong').get_text()
except Exception as e:
# 如果两个XPath表达式都失败了,打印错误信息,并设置票房为空字符串或其他默认值
print(f"无法获取票房数据: {e}")
票房 = ""
导演s =''
海报链接 = ss
上映年份 = web_dg.find_by_xpath('//*[@id="Minfo"]/div[2]/div[2]/div[2]/p[4]').get_text()
上映年份 = re.search('\d+',上映年份).group()
制片地区 = web_dg.find_by_xpath('//*[@id="Minfo"]/div[2]/div[2]/div[2]/p[5]').get_text()
提交人 = '1111'
ssm = '电影名称:' + 名字,'上映年份:' + 上映年份,'制片地区:' + 制片地区,'海报链接:'+海报链接,'导演:'+ 导演s,'票房:'+ 票房,'提交人:' + 提交人
print('电影名称:' + 名字,'上映年份:' + 上映年份,'制片地区:' + 制片地区,'海报链接:'+海报链接,'导演:'+ 导演s,'票房:'+ 票房,'提交人:' + 提交人)
with open(file_path,'a+') as f:
f.write(str(ssm) + '\n')
time.sleep(3)
web.close_all('cef')
try:
web_page = xbot.web.create(url="https://www.endata.com.cn/BoxOffice/BO/History/Movie/Alltimedomestic.html")
zzbds = '//*[@id="layui-laypage-1"]/a[{}]'.format(i)
fanye = web_page.find_by_xpath(zzbds).click()
except Exception:
pass
def read_and_insert_data(file_path):
'''从文件读取数据并插入数据库'''
# 连接到数据库
mydb = pymysql.connect(
host="43.143.30.32",
port=3306,
user="yingdao",
password="9527",
database="ydtest",
charset='utf8'
)
mycursor = mydb.cursor()
# SQL插入语句
sql = """
INSERT INTO movies (电影名称, 上映年份, 制片地区, 海报链接, 导演, 票房, 提交人)
VALUES (%s, %s, %s, %s, %s, %s, %s)
"""
# 读取文件
with open(file_path, 'r', encoding='gbk') as file:
for line in file:
# 去掉行尾的换行符
line = line.strip()
# 分割每一行数据
data_items = line.split(', ')
# 解析数据
movie_name = data_items[0].split(':')[1]
release_year = data_items[1].split(':')[1]
production_area = re.sub(r'国家及地区:', '', data_items[2].split(':')[1]).strip()
poster_link = data_items[3].split(':', 1)[1].strip()
director = data_items[4].split(':')[1]
box_office = re.sub(r'万', '', data_items[5].split(':')[1]).strip()
submitter = data_items[6].split(':')[1]
# 构建数据元组
data = (
movie_name,
release_year,
production_area,
poster_link,
director,
box_office,
submitter
)
print(data)
# 打印数据
# print('电影名称:', movie_name, '上映年份:', release_year, '制片地区:', production_area, '海报链接:', poster_link, '导演:', director, '票房:', box_office, '提交人:', submitter)
# 插入数据到数据库
try:
mycursor.execute(sql, data)
mydb.commit()
print("数据插入成功")
except Exception as e:
mydb.rollback()
print(f"发生错误: {e}")
# 最后关闭游标和数据库连接
mycursor.close()
mydb.close()
data()
read_and_insert_data(file_path)