【发布时间】:2022-01-12 10:54:04
【问题描述】:
我正在尝试运行一个非常简单的 python 脚本,该脚本从 java 内部清除并写入 CSV 文件,但我在执行此操作时遇到了很多麻烦。
脚本不需要任何输入,输出全部写入 CSV 文件,所以我需要做的就是让 python 脚本在我的 java 代码中运行。
以下是我在互联网上看到的一些代码,但似乎对我不起作用。似乎对于这两个脚本,使用此命令对 csv 没有任何作用。不会抛出任何错误,并且 java 程序可能会在不执行 python 脚本的情况下直接退出。
public static void main(String[] args) throws IOException
{
Process p = Runtime.getRuntime().exec("python Refresh.py");
}
这是我正在尝试运行的脚本。
脚本1:
file = open("products.csv","r+")
file.truncate(0)
file.close()
脚本2:
from bs4 import BeautifulSoup as soup
from urllib.request import Request, urlopen
import time
filename = "products.csv"
f = open(filename, "a")
#connects to the page and reads and saves raw HTML
for i in (0,25,50,75):
my_url = 'https://www.adorama.com/l/Computers/Computer-Components/Video-and-Graphics-Cards?startAt='+ str(i) +'&sel=Expansion-Ports_HDMI'
hdr = {'User-Agent': 'Mozilla/5.0'}
client = Request(my_url,headers=hdr)
page = urlopen(client).read()
#parsing the HTML
page_soup = soup(page, "html.parser")
#print (page_soup.h1)
containers = page_soup.findAll("div",{"class":"item"})
#print (len(containers))
containers.pop()
for container in containers:
title_container = container.findAll("div",{"class":"item-details"})
title = title_container[0].h2.a.text.strip()
status_container = container.findAll("div",{"class":"item-actions"})
status = status_container[0].form.button.text.strip()
if (status == "Temporarily not available"):
status = "Out of stock"
else:
status = "In stock"
price = container.find("div","prices").input["value"]
link = container.a["href"]
f.write(title.replace(",", "|") + "," + price.replace(",", "") + "," + status + "," + link + "\n")
time.sleep(0.01)
f.close()
java 文件、Python 脚本和 csv 文件都在同一个文件夹中。
【问题讨论】:
-
你想用Java重写这些python脚本吗?
-
您是否遇到任何错误?例外?您是否尝试过为 python 可执行文件和脚本提供完整路径以查看是否存在问题?
-
无错误无异常。该程序只是运行并退出。我也试过给出 python 可执行文件的完整路径,但不幸的是仍然不起作用。
-
A) 你真的想在该命令中获得 python 二进制文件的完整路径 B) 从一个简单的 python 脚本开始,它只是将一些东西打印到标准输出 C) 然后使用 Java 进程接口来 阅读该脚本所写的内容,依此类推。从小处着手。是的,为什么要为此混合两种语言?
-
谢谢,试试这个。至于语言的混合,我在 Java 中进行网页抓取的经历很糟糕,发现在 python 中更简单,而且更成功。所以我想把我的java项目的webscraping部分改成python。