मैं एक वेब पेज के HTML को लाने और इसे एक में सहेजने में सक्षम होना चाहूंगा String
, इसलिए मैं इस पर कुछ प्रसंस्करण कर सकता हूं। इसके अलावा, मैं विभिन्न प्रकार के संपीड़न कैसे संभाल सकता हूं।
मैं जावा का उपयोग करते हुए कैसे करूंगा?
मैं एक वेब पेज के HTML को लाने और इसे एक में सहेजने में सक्षम होना चाहूंगा String
, इसलिए मैं इस पर कुछ प्रसंस्करण कर सकता हूं। इसके अलावा, मैं विभिन्न प्रकार के संपीड़न कैसे संभाल सकता हूं।
मैं जावा का उपयोग करते हुए कैसे करूंगा?
जवाबों:
यहां जावा के URL वर्ग का उपयोग करके कुछ परीक्षण किए गए कोड हैं । हालांकि, मैं अपवादों को संभालने या कॉल स्टैक पर उन्हें पास करने की तुलना में बेहतर काम करने की सलाह दूंगा।
public static void main(String[] args) {
URL url;
InputStream is = null;
BufferedReader br;
String line;
try {
url = new URL("http://stackoverflow.com/");
is = url.openStream(); // throws an IOException
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (is != null) is.close();
} catch (IOException ioe) {
// nothing to see here
}
}
}
DataInputStream
लिए BufferedReader
। और "dis = new DataInputStream(new BufferedInputStream(is));"
"dis = new BufferedReader(new InputStreamReader(is));"
InputStreamReader
?
मैं Jsoup जैसे एक सभ्य HTML पार्सर का उपयोग करता हूँ । यह तब जितना आसान है:
String html = Jsoup.connect("http://stackoverflow.com").get().html();
यह GZIP को संभालता है और पूरी तरह से पारदर्शी तरीके से प्रतिक्रिया और चरित्र एन्कोडिंग को संभाला है। यह और अधिक लाभ प्रदान करता है, जैसे HTML ट्रैवर्सिंग और CSS चयनकर्ताओं द्वारा हेरफेर जैसे कि jQuery कर सकते हैं। आपको इसे केवल Document
एक के रूप में पकड़ना है , एक के रूप में नहीं String
।
Document document = Jsoup.connect("http://google.com").get();
आप वास्तव में इसे संसाधित करने के लिए HTML पर मूल स्ट्रिंग विधियों या यहां तक कि regex को चलाना नहीं चाहते हैं।
;)
NetworkOnMainThreadException
बिल का उत्तर बहुत अच्छा है, लेकिन आप कुछ चीजों को अनुरोध के साथ करना चाह सकते हैं जैसे संपीड़न या उपयोगकर्ता-एजेंट। निम्न कोड दिखाता है कि आप अपने अनुरोधों के लिए विभिन्न प्रकार के संपीड़न कैसे कर सकते हैं।
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // Cast shouldn't fail
HttpURLConnection.setFollowRedirects(true);
// allow both GZip and Deflate (ZLib) encodings
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = conn.getContentEncoding();
InputStream inStr = null;
// create the appropriate stream wrapper based on
// the encoding type
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
inStr = new GZIPInputStream(conn.getInputStream());
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
inStr = new InflaterInputStream(conn.getInputStream(),
new Inflater(true));
} else {
inStr = conn.getInputStream();
}
उपयोगकर्ता-एजेंट को भी सेट करने के लिए निम्नलिखित कोड जोड़ें:
conn.setRequestProperty ( "User-agent", "my agent name");
ठीक है, आप URL और URLConnection जैसी अंतर्निहित लाइब्रेरी के साथ जा सकते हैं , लेकिन वे बहुत अधिक नियंत्रण नहीं देते हैं।
व्यक्तिगत रूप से मैं अपाचे HTTPClient पुस्तकालय के साथ जाना होगा ।
संपादित करें: HTTPClient को अपाचे द्वारा जीवन के अंत में सेट किया गया है । प्रतिस्थापन है: HTTP घटक
उपर्युक्त सभी दृष्टिकोण वेब पेज टेक्स्ट को डाउनलोड नहीं करते हैं क्योंकि यह ब्राउज़र में दिखता है। इन दिनों html पृष्ठों में बहुत सारा डेटा लिपियों के माध्यम से ब्राउज़रों में लोड किया जाता है। उपर्युक्त तकनीकों में से कोई भी स्क्रिप्ट का समर्थन नहीं करता है, वे केवल HTML पाठ को केवल डाउनलोड करते हैं। HTMLUNIT javascripts का समर्थन करता है। इसलिए यदि आप वेब पेज टेक्स्ट डाउनलोड करना चाहते हैं जैसा कि यह ब्राउज़र में दिखता है तो आपको HTMLUNIT का उपयोग करना चाहिए ।
आपको सबसे अधिक सुरक्षित वेब पेज (https प्रोटोकॉल) से कोड निकालने की आवश्यकता होगी। निम्न उदाहरण में, html फ़ाइल को c: \ temp \ filename.html में सहेजा जा रहा है आनंद लें!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
* <b>Get the Html source from the secure url </b>
*/
public class HttpsClientUtil {
public static void main(String[] args) throws Exception {
String httpsURL = "https://stackoverflow.com";
String FILENAME = "c:\\temp\\filename.html";
BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME));
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
con.setRequestProperty ( "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" );
InputStream ins = con.getInputStream();
InputStreamReader isr = new InputStreamReader(ins, "Windows-1252");
BufferedReader in = new BufferedReader(isr);
String inputLine;
// Write each line into the file
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
bw.write(inputLine);
}
in.close();
bw.close();
}
}
यूनिक्स / लिनक्स बॉक्स पर आप सिर्फ 'wget' चला सकते हैं, लेकिन यदि आप क्रॉस-प्लेटफ़ॉर्म क्लाइंट लिख रहे हैं तो यह वास्तव में कोई विकल्प नहीं है। बेशक यह मानता है कि आप वास्तव में इसे डाउनलोड करने के बिंदु के बीच डाउनलोड किए गए डेटा के साथ बहुत कुछ नहीं करना चाहते हैं और यह डिस्क को मार रहा है।
जेट्टी का एक HTTP क्लाइंट है जिसका उपयोग वेब पेज को डाउनलोड करने के लिए किया जा सकता है।
package com.zetcode;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.ContentResponse;
public class ReadWebPageEx5 {
public static void main(String[] args) throws Exception {
HttpClient client = null;
try {
client = new HttpClient();
client.start();
String url = "http://www.something.com";
ContentResponse res = client.GET(url);
System.out.println(res.getContentAsString());
} finally {
if (client != null) {
client.stop();
}
}
}
}
उदाहरण एक साधारण वेब पेज की सामग्री को प्रिंट करता है।
एक में जावा में एक वेब पेज पढ़ना ट्यूटोरियल मैं जावा में programmaticaly एक वेब पेज dowloading यूआरएल, JSoup, HtmlCleaner, Apache httpclient, जेट्टी HttpClient, और HtmlUnit का उपयोग कर के छह उदाहरण लिखा है।
इस वर्ग से सहायता प्राप्त करें इसे कोड प्राप्त करें और कुछ जानकारी को फ़िल्टर करें।
public class MainActivity extends AppCompatActivity {
EditText url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
url = ((EditText)findViewById( R.id.editText));
DownloadCode obj = new DownloadCode();
try {
String des=" ";
String tag1= "<div class=\"description\">";
String l = obj.execute( "http://www.nu.edu.pk/Campus/Chiniot-Faisalabad/Faculty" ).get();
url.setText( l );
url.setText( " " );
String[] t1 = l.split(tag1);
String[] t2 = t1[0].split( "</div>" );
url.setText( t2[0] );
}
catch (Exception e)
{
Toast.makeText( this,e.toString(),Toast.LENGTH_SHORT ).show();
}
}
// input, extrafunctionrunparallel, output
class DownloadCode extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... WebAddress) // string of webAddress separate by ','
{
String htmlcontent = " ";
try {
URL url = new URL( WebAddress[0] );
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.connect();
InputStream input = c.getInputStream();
int data;
InputStreamReader reader = new InputStreamReader( input );
data = reader.read();
while (data != -1)
{
char content = (char) data;
htmlcontent+=content;
data = reader.read();
}
}
catch (Exception e)
{
Log.i("Status : ",e.toString());
}
return htmlcontent;
}
}
}
मैंने इस पोस्ट ( url ) के वास्तविक उत्तर का इस्तेमाल किया और आउटपुट को फाइल में लिखा।
package test;
import java.net.*;
import java.io.*;
public class PDFTest {
public static void main(String[] args) throws Exception {
try {
URL oracle = new URL("http://www.fetagracollege.org");
BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));
String fileName = "D:\\a_01\\output.txt";
PrintWriter writer = new PrintWriter(fileName, "UTF-8");
OutputStream outputStream = new FileOutputStream(fileName);
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
writer.println(inputLine);
}
in.close();
} catch(Exception e) {
}
}
}