所以我正在使用Jsoup并且它适用于99%(100x不同页面中)的时间,然后有一些网站无法正常工作(不清楚原因)
我的代码(scala)
val con = Jsoup.connect(url)
val userAgent = StatefulRecoverJsoupBrowser.randomUserAgent()
con.headers(StatefulRecoverJsoupBrowser.headers(userAgent).asJava)
con.userAgent(userAgent)
con.followRedirects(true)
con.validateTLSCertificates(true)
con.ignoreHttpErrors(true)
con.ignoreContentType(true)
con.cookies(lastCookies.asJava)
con.referrer(referrer)
proxy.map(_.toProxy).foreach(con.proxy)
con.timeout(connectionTimeout.toMillis.toInt)
val r = con.execute()
现在这适用于此页面(示例)https://www.mountfield.sk/elektricky-vertikutator-levita-s-1400-1zst2046
html代码如下所示:
<html>
<head></head>
<body>
�Is�0z�2���ͮ.IOLb'-��&��*��$���"3@"�H��n���4fo�}�wx�\�Ͼ:����a�TfU�d~�s�\� $@�D����23w_"<<��a�p���Ѧ�t }囯�ῂ�Q��|,�
<suw���m�j����w̗ o�6�]u�\x̗����h[u�pr�lv����<ӭ�tw���3�b�il���^��+
bfe������дi��bf}�vd��lq��:̳e�d������ѩӥ�5�a���xe� ����ȏ� �t�� ��{���
m��[�v��.5�suq��@d�"xtsuu���lt�<��] r���z<����h�b)�q��ztw����w�l��+8���x��n�_r�j{����3~�q5�x#�ѡ�j>
x�V�3���LME��E�)F�I�ub���B/�:�uv��,O<���X��e��P�8.5�,9Kõ�5t*:�KE�����U�kg���a��ă���j�(Wk������i���7�+�g�[��Z�~�0M�'����K�rUC�R��$3#�r2�r!��䪹|�0,W'0��\��BVR ��̅��Cv�]�s�n�o'k�_7�"ƹ-�&�[d�Lo}c�d���|�&������������<2a��Z8! a��г���Q�%�s������K'��',�)�� ���?�������"K;>wV;�g������hK�T�J���ĥ fwxE���r~���m�a�������v��T�������6�8�5_�z�M�(d�c>�"�w �3TE")��)��Aq/��
�籹7�T�� @2�����I �����m�ɺ�$�^_����F�ۺ� \����A�\����׃�=ˠ��7S:���y��wr,�vk�º?����*��c � �t2YضZ�A|�/s~~��
�4 � �ᦳ���{�Y['����QmoAhR��ɒ]|���8��/(�c���d&}�VURu��
<i��bm~��#'���úg�(���狂�(8��j���o�>
��� �'���;`�o�~�p�%�%6��7_��\��z�h�A�`ۇ�>`�`і�������:Nz, \��u���C�џ�Y���/"�Z J�7S����h=�|�? <�O�ყB
....
现在,如果我在邮递员中使用相同的网址,我会得到一个合适的HTML,而不是这个垃圾。我不确定问题出在哪里。可能的是,即使我尽最大努力隐藏自己,但页面仍然知道我是一个机器人,但我不知道如何。有什么建议吗?
答案 0 :(得分:0)
这肯定是一个字符编码问题;该页面具有UTF-8编码。
这里有适合我的Java(抱歉,我不是斯卡拉人):
public static void main(String[] args) {
Document doc;
try {
String url = "https://www.mountfield.sk/elektricky-vertikutator-levita-s-1400-1zst2046";
doc = Jsoup.parse(new URL(url).openStream(), "UTF-8", url);
System.out.println(doc);
} catch (IOException e) {
e.printStackTrace();
}
}
基本上,您需要找到编码参数并将其设置为UTF-8。