Всем привет, меня зовут Се Вэй, я программист.
Я много писал о краулерах, и это последний раз, когда я упоминаю краулеры в статье. Я больше не буду писать в будущем, я хочу изучать другие области.
Тема этого раздела: Как начать работу с поисковым роботом Golang.
В основном делится на следующие этапы:
- Получить исходный код веб-страницы
- Аналитические данные
- Хранение данных
1. Получите исходный код веб-страницы
Просто сделайте запрос, используя родную библиотеку net/http:
GET
func GetHttpResponse(url string, ok bool) ([]byte, error) {
request, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, errors.ErrorRequest
}
request.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
client := http.DefaultClient
response, err := client.Do(request)
if err != nil {
return nil, errors.ErrorResponse
}
defer response.Body.Close()
fmt.Println(response.StatusCode)
if response.StatusCode >= 300 && response.StatusCode <= 500 {
return nil, errors.ErrorStatusCode
}
if ok {
utf8Content := transform.NewReader(response.Body, simplifiedchinese.GBK.NewDecoder())
return ioutil.ReadAll(utf8Content)
} else {
return ioutil.ReadAll(response.Body)
}
}
POST
func PostHttpResponse(url string, body string, ok bool) ([]byte, error) {
payload := strings.NewReader(body)
requests, err := http.NewRequest("POST", url, payload)
if err != nil {
return nil, errors.ErrorRequest
}
requests.Header.Add("Content-Type", "application/x-www-form-urlencoded")
requests.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
client := http.DefaultClient
response, err := client.Do(requests)
if err != nil {
return nil, errors.ErrorResponse
}
fmt.Println(response.StatusCode)
defer response.Body.Close()
if ok {
utf8Content := transform.NewReader(response.Body, simplifiedchinese.GBK.NewDecoder())
return ioutil.ReadAll(utf8Content)
}
return ioutil.ReadAll(response.Body)
}
Используя две вышеупомянутые функции, исходный код веб-страницы можно получить независимо от того, является ли запрос Get или Post.Единственное, что необходимо отметить, это то, что запрос Post должен передавать правильные параметры в запрос.
Использование нативной библиотеки требует написания большого количества кода. Есть ли более лаконичный способ его написания?
Кто-то дополнительно инкапсулировал нативную библиотеку net/http, чтобы сформировать такую библиотеку: gorequest.
Открытый интерфейс очень прост:
resp, body, errs := gorequest.New().Get("http://example.com/").End()
Одна строка кода может выполнить один запрос.
Почтовые запросы также могут быть выполнены относительно легко:
request := gorequest.New()
resp, body, errs := request.Post("http://example.com").
Set("Notes","gorequst is coming!").
Send(`{"name":"backy", "species":"dog"}`).
End()
Вышеуказанными двумя способами, в соответствии с вашими предпочтениями, вы можете получить исходный код веб-страницы. Это первый шаг.
2. Проанализируйте данные
Нам нужно дополнительно проанализировать полученный исходный код веб-страницы, чтобы получить нужные нам данные.
В зависимости от типа ответа мы можем выбрать разные методы.
Как правило, если ответ представляет собой данные в формате html, то мы можем дружно выбрать регулярное выражение или селектор Css, чтобы получить нужный нам контент.
Но если это данные json, то мы можем использовать нативную библиотеку encoding/json для правильной десериализации данных, а также получить данные.
Ну а зная конкретный метод, то наша цель:
- Знакомы с использованием регулярных выражений, знаете, как писать регулярные выражения в соответствующих обстоятельствах
- Знаком с сериализацией и десериализацией json.
- Знакомы со значением символов селектора css, можете написать селектор css в окне отладки chrome.
1. Основная идея
- Ясно, что нужно
- Анализировать веб-страницы
- Получить информацию о веб-странице
- Разобрать информацию о веб-странице
2. Анализ веб-страниц
- Браузер Chrome проверяет элемент, просматривает исходный код веб-страницы
3. Типы значений ответа веб-страницы
- json: Как правило, вызывается именно API, который легче анализировать, просто парсить данные json.
- xml: не часто
- html: общий, используйте регулярные выражения, селекторы CSS, XPATH, чтобы получить то, что вам нужно
4. Тип запроса
- Get : common, просто запросите его напрямую
- Сообщение: необходимо проанализировать параметры запроса, построить запрос, отправить запрос на противоположный сервер, а затем проанализировать значение ответа.
5. Запросить информацию заголовка
- Информация заголовка Uer-Agent
6. Хранение
- Локальный: текст, JSON, CSV
- База данных: реляционная (postgres, MySQL), нереляционная (mongodb), поисковая система (elasticsearch)
7. Обработка изображений
- просить
- место хранения
8. Другие
- прокси: IP пул
- User-Agent: имитация браузера
- APP: данные APP должны использовать инструменты захвата пакетов: Mac (Charles), Windows (Fiddler) (анализ Api)
9. Трудности
- распределенный
- Массовый скрапинг
Пример
- Китайский бокс-офис
- Китайский индекс фильмов
- Знай мяч
- GithubTrending
- древняя поэзия
- касса кошачий глаз
- касса клейкого риса
- Сообщество изображений Pexels
- Глобальные кассовые сборы
Несколько основных моментов
Как получить исходный код веб-страницы
- родная сеть/http
- gorequest (на основе встроенной оболочки net/http)
Метод запроса веб-клиента
- Получите подавляющее большинство
- Post
Ответ веб-сервера
- json
- html
Как обрабатывать ответы веб-сервера
- json: используйте собственную сериализацию json или используйте gjson (сторонний)
- html: регулярные выражения, селекторы CSS, Xpath
Как хранить данные
- Text
- Json
- Csv
- db
Первые три связаны с чтением и записью файлов, последняя — с операциями с базой данных.
исходный код
только для справки:Ссылаться на
Текст окончен, я Се Вэй, до свидания.