Hướng dẫn get html content from url android - lấy nội dung html từ url android

Tôi đã tự hỏi liệu có cách nào để lấy mã HTML từ bất kỳ URL nào và lưu mã đó dưới dạng chuỗi trong mã không? Tôi có một phương pháp:

private String getHtmlData(Context context, String data){
    String head = "";
    String htmlData= ""+head+""+data+"" ;
    return htmlData;
 }

Và tôi muốn nhận "dữ liệu" này từ URL. Làm thế nào tôi có thể làm điều đó?

Đã hỏi ngày 10 tháng 6 năm 2013 lúc 8:09Jun 10, 2013 at 8:09

Hướng dẫn get html content from url android - lấy nội dung html từ url android

Hãy thử điều này (đã viết nó từ bàn tay)

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();

Đã trả lời ngày 10 tháng 6 năm 2013 lúc 8:16Jun 10, 2013 at 8:16

Hướng dẫn get html content from url android - lấy nội dung html từ url android

emiemieMi

5.35610 Huy hiệu vàng59 Huy hiệu bạc107 Huy hiệu đồng10 gold badges59 silver badges107 bronze badges

6

Chắc chắn bạn có thể. Đó thực sự là cơ thể phản ứng. Bạn có thể hiểu như thế này:

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");

Đã trả lời ngày 10 tháng 6 năm 2013 lúc 8:15Jun 10, 2013 at 8:15

EnrichmanenrichmanEnrichman

11K11 Huy hiệu vàng69 Huy hiệu bạc99 Huy hiệu đồng11 gold badges69 silver badges99 bronze badges

Xin hãy xem điều này, bất kỳ trình phân tích cú pháp nào khác cũng sẽ hoạt động, hoặc thậm chí bạn có thể tự kiểm tra các chuỗi và truy xuất chỉ là phần bạn muốn.

Đã trả lời ngày 10 tháng 6 năm 2013 lúc 8:14Jun 10, 2013 at 8:14

Hướng dẫn get html content from url android - lấy nội dung html từ url android

Neron Tneron tNeron T

3692 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges

Khi bạn truy cập một liên kết, trang web trần thường chỉ chứa văn bản (mặc dù được định dạng), có lẽ là hình ảnh và một số quảng cáo. Trong một số dự án, bạn có thể muốn truy cập chỉ các tệp văn bản hoặc hình ảnh thuần túy, điều này không thể chỉ bằng URL. Trên trình duyệt, bạn chỉ cần kéo một phím tắt và truy cập nguồn trang (ctrl + u trên windows; lệnh + u trên macs). Tuy nhiên, lối tắt này không có sẵn trong Java. Để có chương trình của bạn sử dụng URL để truy cập mã HTML, và do đó, phân tích thông qua nó, một vài bước là cần thiết.

Đầu tiên, nếu bạn không có URL hoặc trang web sẵn sàng và thay vào đó có các từ khóa, hãy đảm bảo rằng các từ khóa đó cực kỳ cụ thể cho tìm kiếm của bạn vì chúng tôi sẽ cắm nó vào URL tìm kiếm của Google để xác định kết quả tìm kiếm hàng đầu. Nếu bạn có một trang web cụ thể mà bạn muốn cắm các thuật ngữ tìm kiếm vào, trước tiên hãy kiểm tra URL tìm kiếm mẫu - nếu chúng bao gồm một loạt các chữ số ngẫu nhiên, hãy ở lại đây.

Ví dụ về các URL được đề cập:

1. Can skip the first section:
http://www.azlyrics.com/lyrics/lloyd/thinkofme.html
2. Includes randomized digits:
http://www.allthelyrics.com/lyrics/andrew_lloyd_webber/think_of_me_phantom-lyrics-683994.html

Nếu tìm kiếm trang web có thể được truy cập theo cách như được trình bày bên dưới, thì hãy nhảy sang bước để tạo urlreader.

Trong ví dụ dưới đây, trang web được truy cập là lời bài hát đến Z. Bất kỳ bài hát được tìm kiếm nào của nó có thể được truy cập theo cách tương tự:

Url = http://www.azlyrics.com/lyrics/oursartistname [/waysongnamese.html[artistname]/[songname].html

Các phần được in đậm là các biến cần được thay thế như được thấy dưới đây.

Khi tạo URL trang web từ các từ khóa, bạn chỉ cần có các từ bên trong một danh sách mảng hoặc một mảng có chuỗi và chạy qua chúng theo cách thích hợp cho URL cụ thể. Dưới đây chúng tôi có một ví dụ cho URL được đề cập ở trên:

String artist = "cab";
String[] titleWords = {angel, with, a, shotgun};
String nonRandomURL = "http://www.azlyrics.com/lyrics/"
nonRandomURL += artist + "/";
int size = title.length;
for(i = 0; i < size; i++){
nonRandomURL += titleWords[i];
}
nonRandomURL += ".html";
//returns http://www.azlyrics.com/lyrics/cab/angelwithashotgun.html

Tạo URL tìm kiếm Google được thực hiện theo cách tương tự:

String googleURL= "https://www.google.com/search?safe=strict&source=hp&q=";
String[] keyWords = {...};
int size = keyWords.length;
for(int i = 0; i < size; i++){
googleURL += keyWords[i];
googleURL += +;
}
//returns a viable and searchable Google URL

Triển lãm duy nhất để có URL tìm kiếm Google là bạn sẽ phải gọi URLPinger hai lần (điều này được chi tiết sau), một lần để lấy mã nguồn Google và tìm thẻ cho URL bạn muốn sử dụng, sau đó , Sử dụng BufferedReader để tìm mã nguồn cho trang web thực tế. Điều tẻ nhạt duy nhất về quá trình đó là tìm kiếm các thẻ thích hợp để sử dụng sao cho nó sẽ hoạt động liên tục để có được kết quả bạn muốn, bất kể đầu vào tìm kiếm.

Bây giờ, một khi bạn đã đảm bảo rằng bạn có URL của mình ở dạng chuỗi, điều này đã xảy ra nếu bạn làm theo các bước đã nói ở trên hoặc đã áp dụng phương thức :

URL lyricsURL = https://www.azlyrics.com/lyrics/lloyd/thinkofme.html
String lyricsURLString = lyricsURL.toString();
//returns https://www.azlyrics.com/lyrics/lloyd/thinkofme.html

Bước tiếp theo là tạo một đối tượng URLPinger bên trong Asynctask. Một asynctask được đặt bên trong lớp hoặc hoạt động (cho Android Studio) trong đó mã chính đang chạy. Vì nhiều đoạn mã có thể bị phức tạp và mất nhiều thời gian để chạy, có Asynctask cho phép bạn chạy mã, thực hiện các hoạt động nền và xuất bản kết quả trên luồng UI (Giao diện người dùng) mà không thao tác với các luồng khác. Nó thường cho phép thời gian chạy nhanh hơn vì các luồng UI có xu hướng cập nhật cứ sau 15 mili giây (ms), vì vậy nếu bạn có một thao tác yêu cầu 16 ms, thì toàn bộ hoạt động phải chờ vòng tiếp theo. Do đó, có các tác vụ không đồng bộ cho phép bạn bắt đầu và dừng các hoạt động vào các thời điểm khác nhau. Theo nguyên tắc thông thường, khi bạn thực hiện các yêu cầu máy chủ, Asynctasks được sử dụng.

Lớp URLPinger đi vào bên trong tính chính xác, mở rộng Asynctask và có 3 thuật ngữ ở giữa. Thuật ngữ đầu tiên là loại tham số (tham số) mà bạn muốn chuyển vào Asynctask, trong trường hợp này là chuỗi. Thứ hai là loại đơn vị tiến bộ được thông qua trong quá trình tính toán nền. Thông thường, điều này được đặt là khoảng trống, và có một vài ngoại lệ trong đó có các đơn vị. Thuật ngữ cuối cùng là loại kết quả mà bạn nhận được từ tính toán nền, trong trường hợp này cũng là một chuỗi.

private class URLPinger extends AsyncTask {
...
}

Bên trong Asynctask, khi bạn nhấn Enter sau {đầu tiên, sẽ có một phần của mã tự động tạo:

@Override
protected String doInBackground(String... strings) {
//your code here
}

Trong trường hợp của chúng tôi, vì tham số của chúng tôi là chuỗi, chúng tôi có chuỗi. . . dây. Bây giờ, nơi nó nói // mã của bạn ở đây, chúng tôi sẽ đặt đối tượng chính của chúng tôi, urlreader. Điều này cần phải được tạo đầu tiên trong một lớp Java riêng biệt. Lớp này phục vụ để làm những gì tên gợi ý: nó đọc qua các dòng mà một URL cụ thể sẽ tạo và trả về chúng dưới dạng chuỗi.

Bước đầu tiên để đặt lên là thiết lập lớp với các biến thể hiện và hàm tạo có trong một URL biến chuỗi và đặt biến thể hiện thành tham số:

public class URLReader {
private String HTMLCode = "";
private String urlString = "";
private static final String TAG = "urlreader";
private static final String RICK_ROLL = "SAFETY HTML CODE";
//to access the URL for later operations
public
URLReader(String url){
this.urlString = url;
}
...
}

Sau đó, chúng ta có thể tiến hành viết phương thức .ReaderReturn () mà khi được gọi, sẽ trả về mã HTML cho URL được nhập. Nó bắt đầu bằng cách tạo phương thức và ném IOException do bị lỗi khi truy cập internet sau này trong phương thức (điều này có thể được thực hiện thông qua tự động hoàn thành trong Android Studio):

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
0

Bên trong phương thức, chúng ta cần có một chuỗi để xây dựng các dòng mã bổ sung được truy cập, vì vậy chúng tôi tạo một chuỗi trống như vậy:

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
1

Sau đó đến phần chính của mã. Đầu tiên, gánh nặng của mã sẽ nằm giữa ngoại lệ thử/bắt được thiết lập như sau:

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
2

Bên trong câu lệnh thử, trước tiên chúng tôi tạo một đối tượng URL có trong mô tả chuỗi của URL thực tế:

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
3

Sau đó, ngay sau khi chúng tôi tạo một đối tượng URLConnection, cho phép bộ đệm sau thực sự truy cập trang web bằng cách mở kết nối:

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
4

Bước tiếp theo là tạo một bộ đệm kết nối URLConnection. Điều này là cần thiết bởi vì bộ đệm là một lớp chuyên dụng trong Java đọc thông qua các dòng đầu vào của các ký tự và cung cấp phương pháp hiệu quả nhất để đọc các ký tự, dòng và mảng. BufferedReader lấy một InputStreamReader làm tham số sau đó lấy một đầu vào làm tham số.

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
5

Lớp InputStream là một siêu lớp trừu tượng được thiết kế để thể hiện luồng thông tin được đọc từ trang web. Đối tượng URLConnection là những gì GetInputStream đang đọc, do đó cung cấp thông tin bộ đệm để đọc và hiểu được.

Tiếp theo, một chuỗi trống được đặt:

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
6

Bạn cũng có thể sử dụng một đối tượng StringBuilder để nối các dòng sau, như được chỉ ra trong nhận xét.

Từ đó, sau đó chúng ta có thể đặt dòng biến khi chuỗi nhận được từ thông tin mà bộ đệm hiện đang giữ, được thực hiện bằng cách thực hiện phương thức .Readline () trên đối tượng BufferedReader. Điều này cho phép nó đọc một dòng văn bản trái ngược với .read () chỉ đọc một ký tự.

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
7

Log.ds không bắt buộc khi thiết lập lớp, nhưng nó được đề xuất do sự yếu đuối của Internet. Thông thường, bạn có thể kết thúc với các lỗi kỳ lạ hoàn toàn không có ý nghĩa và cách duy nhất để giải quyết chúng là đăng nhập các phần để xem chính xác nó thất bại ở đâu.

Bên ngoài vòng lặp trong khi, sau khi nội dung nối thêm tất cả các dòng trong HTML, bộ đệm cần thiết phải đặt lại và đóng để có thể được sử dụng lại trong tương lai để đọc qua một trang web khác trong cùng một hoạt động chính. Nó nên sử dụng tất cả các nội dung (nên là một chuỗi) để kiểm tra để đảm bảo bộ đệm chạy qua tất cả các dòng cần thiết. Nếu bạn đã sử dụng StringBuilder ngay từ đầu thay vì một chuỗi, mã được nhận xét sẽ hiển thị cách thu được một chuỗi, giống như tất cả các phương thức toString () khác.

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
8

Cuối cùng, để hoàn thành lớp urlreader, bạn cần đặt biến HTMLCode biến thể hiện của mình thành chuỗi mà bạn vừa tạo, đó là nội dung và HTMLCode trả về để truy cập vào sau này, vì phương thức ReaderReturn yêu cầu trả về một chuỗi.

URL google = new URL("http://www.google.com/");
BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null)
{
    stringBuffer.append(input);
}
in.close();
String htmlData = stringBuffer.toString();
9

Ở đó chúng tôi có một lớp URLREADER đã hoàn thành! Bây giờ, chúng ta chỉ cần áp dụng nó bên trong urlpinger asynctask. Bạn có thể nhớ lại chúng tôi đã dừng lại ở phương thức Doinbackground:

@Override
protected String doInBackground(String... strings) {
//your code here
}

Chúng tôi sẽ tạo ra một đối tượng UrlReader và cung cấp cho nó chuỗi ở vị trí 0 trong chuỗi mảng từ trước và gọi phương thức readerReturn () trên đó có một chuỗi, chính xác là những gì chúng ta cần:

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
1

Bây giờ, vì urlreader luôn ném một ngoại lệ, nó sẽ gây ra lỗi IOException trừ khi bạn sửa nó. Có hai cách để khắc phục các loại lỗi đó: bạn có thể bao quanh dòng vi phạm trong một ngoại lệ thử/bắt hoặc thêm IOException vào chữ ký phương thức. Cái trước bắt được ioexception và trả lại null nếu bị bắt và cái sau thêm một

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
2

Để tiêu đề phương thức, do đó tên. Có thể có nhiều trường hợp ngoại lệ khác, tùy thuộc vào các đối tượng và phương thức được sử dụng trong câu hỏi bao gồm nhưng không giới hạn ở:

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
3

Nói chung, nếu một biến mới được khai báo và đó là gốc của IOException, bạn muốn thêm chữ ký phương thức thay vì xung quanh nó trong một lần thử/nắm bắt ngoại lệ vì bất cứ điều gì được khai báo bên trong một ngoại lệ thử/bắt được giới hạn hoàn toàn được truy cập hoặc gọi lại bên ngoài có thể đưa ra một vấn đề khi cần lại các giá trị biến sau. Tuy nhiên, chúng tôi không có vấn đề đó ở đây vì chúng tôi ngay lập tức trả lại chuỗi được truy cập để chúng tôi có thể làm như vậy:

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
4

Điều này trả về urlreader chuỗi nếu có một cái gì đó ở đó nhưng trả về null nếu một ngoại lệ bị bắt.

Kết thúc urlpinger asynctask với phương thức được bảo vệ onpostexecute bên trong phương thức doinbackground, chạy trên luồng UI chính sau khi doinbackground (params,) được gọi và được sử dụng để đóng asynctask. // Đây thực sự là những gì nó làm ???//is this actually what it does???

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
5

Bây giờ chúng ta có một lớp URLPinger sẵn sàng, chúng ta có thể tạo một đối tượng, gọi phương thức .Execute (Mạnh) với dạng chuỗi của URL được lấy làm tham số và cuối cùng, gọi .get () trên đó.

HttpResponse response = client.execute(post);
String htmlPage = EntityUtils.toString(response.getEntity(), "ISO-8859-1");
6

Bây giờ, khi bạn đăng nhập hoặc in htmllyrics của bạn, nó sẽ cung cấp cho bạn toàn bộ mã HTML của trang web bạn muốn, tương tự như chức năng nguồn xem trang.

Bây giờ, hãy vui vẻ sắp xếp thông qua mã HTML của bạn để tìm các phần mà bạn cần! Đó là một hướng dẫn hoàn toàn khác về nó. Tôi hy vọng điều này sẽ giúp và cảm thấy thoải mái khi đặt câu hỏi và để lại ý kiến ​​để làm rõ!

Làm cách nào để lấy mã HTML từ URL trong Android?

Mở trình duyệt Google Chrome trên điện thoại hoặc máy tính bảng Android của bạn.Mở trang web có mã nguồn bạn muốn xem.Nhấn vào một lần trong thanh địa chỉ và di chuyển con trỏ đến mặt trước của URL.Nhập nguồn xem Nguồn: và nhấn Enter hoặc Go.

Làm cách nào để có được nội dung HTML của URL mở trong Android Webview?

Có một lớp gọi là WebViewClient, trong số những thứ khác có thể được sử dụng để ghi đè những gì sẽ xảy ra khi A theo liên kết trong WebView.Điều này cùng với một chút JavaScript có thể được sử dụng để có được nguồn.Đơn giản vậy thôi.