1. Требования и конфигурация
Требования: заполните информацию на странице поиска мобильного телефона JD, запишите имя, цену, количество комментариев и т. Д. На каждом мобильном телефоне и сформируйте таблицу данных, которую можно использовать для фактического анализа.
Используя проект Maven, журналы log4j, журналы экспортируются только в консоли.
Maven зависит от следующего (pom.xml)
<Depectientdy> <dependency> <groupid> org.apache.httpcomponents </GroupId> <artifactid> httpclient </artifactid> <sersive> 4.5.3 </version> </degypclient> <!-JSoup html Parser Library @ https://jsoup.org/-> <groupd> <groupd> <groupd> <groupd> <artifactid> jsoup </artifactid> <sersion> 1.11.2 </version> </dependency> <!-https://mvnrepository.com/artifact/log4j/log4j-> <dependence> <groupid> log4j </GroupD> <ratifactid> log4j </artifactid> <sers> 1.2.17 </GroupId> <strifactid> log4j </artifactid> </2. </зависимости>
Конфигурация log4j (log4j.properties), информация о выводе и вышеупомянутую информацию в консоли и не устанавливайте выходной документ отдельно.
log4j.rootlogger = info, console #console log4j.appender.console = org.apache.log4j.consoleappenderlog4j.appender.console.layout = org.apache.log4j.patternlayoutlog4j.appender.console.layout.conversionpattern =% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%. %m %n
2. Анализ требований и код
2.1 Анализ требований
Первый шаг - установить соединение между клиентом и сервером и получить контент HTML на веб -странице через URL.
Второй шаг - проанализировать содержание HTML и получить необходимые элементы.
Третий шаг состоит в том, чтобы вывести контент HTML в локальный текстовый документ и может быть непосредственно проанализирован с помощью другого программного обеспечения для анализа данных.
Согласно вышеуказанному анализу, установлены четыре класса, Gethtml (используется для получения веб -сайта HTML), Parsehtml (используется для анализа HTML), WriteTo (используется для вывода документов) и MainControl (используется для управления). Ниже приведены четыре класса. Чтобы сделать код максимально кратким, все исключения отбрасываются непосредственно из метода без участия.
2.2 код
2.2.1gethtml Class
Этот класс содержит два метода: Geth (String URL), UrlControl (String Baseurl, Int Page), которые соответственно используются для получения HTML и URL -адреса управления веб -страницей. Поскольку содержимое веб -страницы, которое ползал на этот раз, является только результатами поиска определенного типа продукта на JD.com, нет необходимости пересекать все URL -адреса на странице. Вам нужно наблюдать за изменениями в URL только при повороте страницы и представить правила. Только метод UrlControl подвергается воздействию внешней части, а в классе установлено частное свойство журнала: частный статический логический журнал = logger.getLogger (gethtml.class); используется для записи журналов.
Geth (String URL), получите HTML -содержание одного URL.
UrlControl (String Baseurl, Int Page) устанавливает цикл и обращается к данным нескольких страниц. Просмотрев элементы, вы можете видеть, что изменение на странице страницы поиска на JD.com на самом деле является изменением в нечетном порядке.
Если вы посмотрите на изменения в URL -адресу после нажатия, вы обнаружите, что фактическое изменение - это значение атрибута страницы. Сплайсингом вы можете легко получить адрес следующей веб -страницы.
https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=3&s=47&click=0
https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=5&s=111&click=0
https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=7&s=162&click=0
Общий код:
Импорт java.io.ioexception; import org.apache.http.httpentity; import org.apache.http.client.clientprotocolexception; импорт org.apache.http.client.methods.closablehttpresponse; import org.apache.http. org.apache.http.impl.client.closablehttpclient; import org.apache.http.impl.client.httpclient; import org.apache.http.util.entityutils; import org.apache.log4j.logger; public class gethtml {// create log grog vog vog gog gog gog gog gor gog gog gog vog gor gog vog gor gog = vorgger = create grog gog = vorgger = vog. Logger.getlogger (gethtml.class); Частная статическая строка Geth (String URL) бросает клиентупротоколексапс, ioException {// консоль выходов, так что каждый доступный URL может видеть ситуацию доступа в консольном log.info ("разрешение" + url); / * * Следующее содержимое - это общее использование httpclient для установления соединений * Использовать httpclient для установления клиента * Используйте метод получения для доступа к указанному URL * Получить ответ * */ clequablehttpclient client = httpclients.createdefault (); Httpget get = new httpget (url); ClosableHttpresponse response = client.execute (get); / * * Следующее содержимое предназначено для преобразования контента HTML в строку * Получить тело ответа * Конвертировать тело ответа в формат строки, здесь используется метод ToString в EnityUtils, и формат кодирования устанавливается на «utf-8» * Закройте клиент и ответ после завершения * */ httpentity entity = response.getentity ();); Строка содержание; if (entity! = null) {content = entityutils.tostring (entity, "utf-8"); client.close (); response.close (); вернуть контент; } else return null; } public static void urlControl (String baseUrl, int page) Throws ClientProtocolexception, ioException {// Установить текущее количество страниц count int count = 1; // Если текущая страница меньше, чем количество страниц, которые вы хотите ползти, выполните, пока (count <page) {// На самом деле доступ к URL -адресу - это неизменное значение URL -адреса, сплайдированное с помощью значения изменения URL u = baseurl + (2 * count - 1) + "& click = 0"; // Здесь мы называем метод в классе Parsehtml для обработки страницы HTML в URL, и мы представим содержимое строки класса = parsehtml.parse (geth (u)). Tostring (); // Здесь мы называем метод в классе Writeto, чтобы написать анализированный контент локально. Позже мы представим класс witreto.writeto (content); count ++; }}}2.2.2parsehtml Class
Этот шаг требует, чтобы элемент обзора определял теги, которые необходимо заползнуть, а затем получить их через селектор CSS в JSoup.
Import org.jsoup.jsoup; import org.jsoup.nodes.document; import org.jsoup.nodes.element; import org.jsoup.select.elements; public class parsehtml {public static Stringbuilder parse (строка содержимо Документ doc = jsoup.parse (content); // Используйте SELECT SELECT, чтобы взять элементы, которые вам нужно найти. Например, первый выбор-это контент, атрибут класса которого равен GL-WARP ClearFix в элементах тега UL ele = doc.select ("ul [class = gl-warp clearfix]"). Select ("li [class = gl-item]"); // Установить контейнер для установки каждого атрибута stringBuilder sb = new StringBuilder (); // Используйте предыдущий селектор, чтобы получить все элементы, которые соответствуют требованиям на всей странице, то есть каждый телефон. Ниже вам нужно пройти через каждый телефон, чтобы получить его атрибуты для (Элемент E: ELE) {// Приобретение каждого атрибута здесь относится к контенту, ползующей статью, на JD.com в Интернете. Должны быть другие различные методы письма. String id = e.attr ("data-pid"); String mingzi = e.select ("div [class = p-name p-name-type-2]"). Select ("a"). Select ("em"). Text (); String jiage = e.select ("div [class = p-price]"). Select ("strong"). Select ("i"). Text (); String pinglun = e.select ("div [class = p-commit]"). Select ("strong"). Select ("a"). Text (); // Добавить атрибуты sb.append (id+"/t"); sb.append (mingzi+"/t"); SB.Append (jiaage+"/t"); sb.append (pinglun+"/t"); sb.append (pinglun+"/t"); sb.append ("/r/n"); } вернуть SB; }}2.2.3
Методы в этом классе записывают анализируемый контент в локальный файл. Просто простой io.
Импорт java.io.bufferedwriter; import java.io.file; import java.io.filewriter; импорт java.io.ioexception; открытый класс writeto {// Установить местоположение хранилища файлов частным статическим файлом f = новый файл ("c: //jingdong.txt"); public static void writeto (String Content) Throws IOException {// Использование метода непрерывного записи, чтобы избежать перезаписи ранее написанного контента BufferedWriter BW = новый буферист (New FileWriter (F, True)); BW.Append (Content); bw.flush (); bw.close (); }}2.2.4 MainControl Class
Основная программа управления, напишите базовый адрес и количество страниц, которые будут получены. Вызовите метод UrlControl в классе Gethtml, чтобы ползти по странице.
Импорт java.io.ioexception; import org.apache.http.client.clientprotocolexception; public class maincontrol {public static void main (string [] args) бросает клиентский протоколекспений, ioException {// todo Auto-Generated метод STUB BaseUrl = ioExcept "https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&enc=" + "UTF-8 & QRST = 1 & RT = 1 & STOP = 1 & VT = 2 & CID2 = 653 & CID3 = 655 & PAGE ="; int page = 5; // Установить номер страницы Crawl gethtml.urlcontrol (baseurl, page); }}3. Результаты ползания
Ползание 20 страниц.
3.1 Консоль вывод
3.2 Вывод документа
Вы можете напрямую открыть его с помощью Excel, а разделитель - символ TAB. Столбцы - это номер продукта, имя, цена и количество комментариев соответственно.
4. Резюме
В этом скале используется httpclient и jsoup, что показывает, что для простых потребностей эти инструменты все еще очень эффективны. На самом деле, вы также можете написать все классы в один класс, и идея написания нескольких классов яснее.
Приведенная выше статья Java Crawler Crawls на странице мобильного поиска httpclient+jsoup на jd.com - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.