위의 내용은 저에게 적합하지 않았습니다. 나는 이것을 관리하기 위해 노력했다. 처음에는 4 년 만에 Java를 사용하기 때문에 이것이 향상 될 수 있다고 확신합니다.
public static boolean robotSafe(URL url)
{
String strHost = url.getHost();
String strRobot = "http://" + strHost + "/robots.txt";
URL urlRobot;
try { urlRobot = new URL(strRobot);
} catch (MalformedURLException e) {
// something weird is happening, so don't trust it
return false;
}
String strCommands;
try
{
InputStream urlRobotStream = urlRobot.openStream();
byte b[] = new byte[1000];
int numRead = urlRobotStream.read(b);
strCommands = new String(b, 0, numRead);
while (numRead != -1) {
numRead = urlRobotStream.read(b);
if (numRead != -1)
{
String newCommands = new String(b, 0, numRead);
strCommands += newCommands;
}
}
urlRobotStream.close();
}
catch (IOException e)
{
return true; // if there is no robots.txt file, it is OK to search
}
if (strCommands.contains(DISALLOW)) // if there are no "disallow" values, then they are not blocking anything.
{
String[] split = strCommands.split("\n");
ArrayList<RobotRule> robotRules = new ArrayList<>();
String mostRecentUserAgent = null;
for (int i = 0; i < split.length; i++)
{
String line = split[i].trim();
if (line.toLowerCase().startsWith("user-agent"))
{
int start = line.indexOf(":") + 1;
int end = line.length();
mostRecentUserAgent = line.substring(start, end).trim();
}
else if (line.startsWith(DISALLOW)) {
if (mostRecentUserAgent != null) {
RobotRule r = new RobotRule();
r.userAgent = mostRecentUserAgent;
int start = line.indexOf(":") + 1;
int end = line.length();
r.rule = line.substring(start, end).trim();
robotRules.add(r);
}
}
}
for (RobotRule robotRule : robotRules)
{
String path = url.getPath();
if (robotRule.rule.length() == 0) return true; // allows everything if BLANK
if (robotRule.rule == "/") return false; // allows nothing if/
if (robotRule.rule.length() <= path.length())
{
String pathCompare = path.substring(0, robotRule.rule.length());
if (pathCompare.equals(robotRule.rule)) return false;
}
}
}
return true;
}
그리고 당신은 도우미 클래스가 필요합니다 : 질문이 정확히 무엇
/**
*
* @author Namhost.com
*/
public class RobotRule
{
public String userAgent;
public String rule;
RobotRule() {
}
@Override public String toString()
{
StringBuilder result = new StringBuilder();
String NEW_LINE = System.getProperty("line.separator");
result.append(this.getClass().getName() + " Object {" + NEW_LINE);
result.append(" userAgent: " + this.userAgent + NEW_LINE);
result.append(" rule: " + this.rule + NEW_LINE);
result.append("}");
return result.toString();
}
}
을? 그리고 robot.txt를 파싱하는 것이 Jsoup의 범위를 벗어나는 것 같습니다. Jsoup는 스스로 말한대로 웹 페이지를 구문 분석하기위한 것입니다. – Darwind
고마워요. 예, 페이지 구문 분석에 jsoup를 사용하고 있습니다 ...하지만 요구 사항은 robots.txt에서만 허용되는 (제한되지 않음) URL을 구문 분석하는 것입니다. JS 유효성 검사는 JS 또는 JS가 최상 또는 유능하지 않은 것으로 보입니다. . 그래서 내가 알아야 할 것은 실제 파싱을하기 전에 robots.txt에서 어떻게 검증을 할 수 있는가입니다. –
좋습니다. 좋습니다. jsoup를 사용하는 작은 프로젝트에서 일하고 싶었 기 때문에 직접 할 수도있었습니다. – alkis