


Écrivez un robot Java Zhihu sans fondation pour obtenir le contenu recommandé par les éditeurs Zhihu (2)
Les pages Web peuvent définir l'encodage de la page Web via le jeu de caractères de la balise méta, par exemple :
<meta charset="utf-8" />
Nous faisons un clic droit pour afficher le code source de la page :
Comme vous pouvez le voir, Zhihu utilise l'encodage UTF-8.
Ici, je vais vous expliquer la différence entre visualiser le code source de la page et inspecter les éléments.
L'affichage du code source de la page affiche tout le code de la page entière. Il n'est pas formaté selon les balises HTML. Cela équivaut à afficher directement le code source. Cette méthode est plus utile pour afficher les informations de la page. page Web entière, telle que méta.
Inspecter l'élément, ou certains navigateurs l'appellent view element, qui consiste à afficher l'élément sur lequel vous cliquez avec le bouton droit, comme un div ou un img. Il est plus approprié pour afficher les attributs et les balises d'un objet individuellement.
D'accord, nous savons maintenant que le problème réside dans l'encodage, et la prochaine étape consiste à convertir l'encodage du contenu capturé.
C'est très simple à implémenter en java. Il vous suffit de spécifier la méthode d'encodage dans le InputStreamReader :
// 初始化 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream(),"UTF-8"));
Exécutez à nouveau le programme à ce moment et vous constaterez que le titre. peut être affiché normalement :
D'accord ! très bien!
Mais maintenant il n'y a qu'un seul titre, il nous faut tous les titres.
Nous modifions légèrement l'expression régulière et stockons les résultats recherchés dans une ArrayList :
import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.regex.*; public class Main { static String SendGet(String url) { // 定义一个字符串用来存储网页内容 String result = ""; // 定义一个缓冲字符输入流 BufferedReader in = null; try { // 将string转成url对象 URL realUrl = new URL(url); // 初始化一个链接到那个url的连接 URLConnection connection = realUrl.openConnection(); // 开始实际的连接 connection.connect(); // 初始化 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream(), "UTF-8")); // 用来临时存储抓取到的每一行的数据 String line; while ((line = in.readLine()) != null) { // 遍历抓取到的每一行并将其存储到result里面 result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } static ArrayList<String> RegexString(String targetStr, String patternStr) { // 预定义一个ArrayList来存储结果 ArrayList<String> results = new ArrayList<String>(); // 定义一个样式模板,此中使用正则表达式,括号中是要抓的内容 Pattern pattern = Pattern.compile(patternStr); // 定义一个matcher用来做匹配 Matcher matcher = pattern.matcher(targetStr); // 如果找到了 boolean isFind = matcher.find(); // 使用循环将句子里所有的kelvin找出并替换再将内容加到sb里 while (isFind) { //添加成功匹配的结果 results.add(matcher.group(1)); // 继续查找下一个匹配对象 isFind = matcher.find(); } return results; } public static void main(String[] args) { // 定义即将访问的链接 String url = "http://www.zhihu.com/explore/recommendations"; // 访问链接并获取页面内容 String result = SendGet(url); // 使用正则匹配图片的src内容 ArrayList<String> imgSrc = RegexString(result, "question_link.+?>(.+?)<"); // 打印结果 System.out.println(imgSrc); } }
De cette façon, tous les résultats peuvent correspondre (car l'ArrayList est imprimée directement, elle sera Il y a quelques crochets et virgules) :
OK, c'est la première étape du robot d'exploration Zhihu.
Mais nous pouvons voir qu'il n'y a aucun moyen de capturer toutes les questions et réponses de cette manière.
Nous devons concevoir une classe d'encapsulation Zhihu pour stocker tous les objets capturés.
Ce qui précède est le contenu de l'écriture du robot Java Zhihu avec aucune connaissance de base pour obtenir le contenu recommandé par l'éditeur Zhihu (2). Pour plus de contenu connexe, veuillez faire attention. sur le site Web PHP chinois (www.php.cn) !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.
