如何從 url 的字串陣列中洗掉包含特殊字符(如“#”和小字串(如“.pdf”))的 url?
我正在制作一個網路蜘蛛。目標是能夠生成一個網站的完整 url 串列,減去我不想要的東西。蜘蛛進入主頁,獲取 url,然后訪問每個 url,然后訪問以前沒有訪問過的那些 url 上的每個 url。
我試圖通過從我的字串陣列中洗掉包含“.zip”、“.pdf”、“ ”或“#”的 url 來凈化它給我的資料。
我嘗試使用以下 if 陳述句的一個版本來執行此操作,這是它的簡化版本,它假設有一個充滿 url 的字串陣列和一個名為 TotalNumberOfUrls 的 int,其中包含 url 的總數。
String j = "";
while( x != TotalNumberOfUrls)
{
j = ValueOfGiantStringArray[x];
if(!(j.contains("#")) || !(j.contains(" ")) || !(j.contains(".pdf")) || !(j.contains(".zip")))
{
//Runs a scraping module on the url contained in the string j.
}
x ;
}
這對我不起作用。出于某種原因,即使 j 的值為“https://procomps.com/cherry-services/cadalog/#content”,我的刮刀也在這個 if 陳述句中運行。由于某種原因,它沒有檢測到 #。
從我的 url 字串陣列中清除帶有這些不需要的字符和文本塊的 url 的最佳方法是什么?
uj5u.com熱心網友回復:
在陳述句的條件中將||s更改為s 。這樣,塊內的代碼只會在 url 中沒有您不想要的字符時運行。&&ifif
uj5u.com熱心網友回復:
你的 if 條件是錯誤的。一般來說,如果你想表達的Something doesn't contain a or b or c是類似 !( contains(a) || contains(b) || contains(c) )或根據德摩根定律的以下等價表達!contains(a) && !contains(b) && !contains(c)
假設您有一個與以下類似的陣列,并且您正在使用如下所示的 while 回圈應該可以作業:
String[] myURLs = { "someURL.com/somePath/file.zip",
"someURL.com/somePath/blabla#blup",
"someURL.com/somePath/another.pdf",
"someURL.com/somePath/some-content",
"http://myapp/mypage/mycontent",
"http://myapp/my test/jjj"};
String j = "";
int x = 0;
while( x != myURLs.length) {
j = myURLs[x];
if( !(j.contains("#") || j.contains(" ") || j.contains(".pdf") || j.contains(".zip")) ) {
//Runs a scraping module on the url contained in the string j.
System.out.println("Scraping content from URL: " j);
}
x ;
}
IMO for 回圈將使您的代碼比 while 回圈更具可讀性。使用與上面相同的陣列:
for (int i = 0; i < myURLs.length; i ) {
String temp = myURLs[i];
if( !(temp.contains("#") || temp.contains(" ") || temp.contains(".pdf") || temp.contains(".zip")) ) {
//Runs a scraping module on the url contained in the string temp.
System.out.println("Scraping content from URL: " temp);
}
}
如果你想玩轉 Java-8 的特性
Set<String> exclude = Set.of("#", " ", ".pdf", ".zip");
Arrays.stream(myURLs)
.filter(url -> !exclude.stream().anyMatch(url::contains))
.forEach(url -> {
//Runs a scraping module on the url contained in the string url.
System.out.println("Scraping content from URL: " url);
});
或正則運算式
Pattern pattern = Pattern.compile("#|\\ |\\.pdf|\\.zip");
for (String url : myURLs) {
if(!pattern.matcher(url).find()){
//Runs a scraping module on the url contained in the string url.
System.out.println("Scraping content from URL: " url);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324826.html
