1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xpan-lu-go_sexy

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:20 92b65d5

Go-язык: реализация проекта по созданию паука для сбора данных с сайта «Ммjpg.com»

Это чисто учебный проект, в котором используются многие особенности Go, такие как goroutine, channel, пользовательские типы и обработка ошибок.

Проект представлен для ознакомления, я также являюсь новичком в Golang. Если есть какие-либо места, которые написаны плохо, пожалуйста, укажите на них.

Обновление:

  • 20 октября 2015 года добавлена функция конфигурационного файла, чтобы поместить адрес сайта, который нужно собрать, и соответствующее регулярное выражение в файл JSON.
  • 28 ноября 2017 года код, представленный @hanshijiex, был объединён и исправлены следующие проблемы:
    • Многопоточное состязательное чтение и запись в map приводили к panic.
    • Переход на новый URL сайта «Ммjpg.com».
    • Имитация заголовка, что позволило обмануть защиту от сбора данных и привести к сбору неправильных изображений.
  • 29 ноября 2017 года:
    • Поддержка SOCKS5 прокси-сервера.
    • Создание HTTP-клиента только один раз.
{
	"root":"xxxxxx.com",
	"proxy":{
		"server":"127.0.0.1:1080", /*SOCKS5代理服务器,如果设置成空字符串则不使用代理 127.0.0.1:1080*/
		"username":"",
		"password":""
	},
	"header":{/*http请求头*/
		"Host":"xxxxxx.com",
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
		"Referer": "http://xxxxxx.com/zaqizaba/2407.html"
	},
	"charset":"gbk", /*可选值utf-8或gbk*/
	"regex":{
		"page":[], /*正则表达式,只有符合的页面才会被抓取并解析,空白表示所有页面都抓取*/
		"imgInPage":["\S+\d+\.html"], /*存放正则,指定图片存在于哪些页面*/
		"href":[ /*匹配页面上的链接*/
			{
				"query":"a", /*存放链接的dom选择器*/
				"attr":"href"
			}
		],
		"image":[ /*匹配页面上的图片地址*/
			{
				"query":"article.article-content img", /*匹配图片的dom选择器*/
				"attr":"src",
				"folder":"none" /*存放图片的文件夹,可选值url,title,none,正则表达式,文件夹名称*/
			}
		]
	}
}

Конфигурационный файл использует формат JSON:

  • root: строка, адрес сайта для сбора.
  • header: HTTP-заголовок запроса.
  • charset: кодировка страницы, можно выбрать utf-8 или gbk.
  • proxy.server: адрес и порт прокси-сервера, например: 127.0.0.1:1080, поддерживает только SOCKS5 прокси, пустая строка означает не использовать прокси.
  • proxy.username: имя пользователя прокси-сервера, если не требуется аутентификация, установите пустую строку.
  • proxy.password: пароль прокси-сервера, если не требуется аутентификация, установите пустую строку.
  • regex.image: массив, используется для сопоставления адресов изображений на странице.
  • regex.image.query: строка, сопоставление селектора DOM для изображения.
  • regex.image.attr: строка, указывает атрибут, содержащий адрес изображения.
  • regex.image.folder: строка, может быть введена url, title, none или регулярное выражение, где регулярное выражение используется для соответствия содержимому страницы.
    • url: использование имени (исходный код — path.Base(url)) в качестве названия папки.
    • title: использование заголовка страницы.
    • none: не создавать папку, все изображения помещаются вместе.
    • Регулярное выражение: можно сопоставить содержимое страницы для создания имени папки.
  • regex.page: массив, хранит регулярные выражения, только страницы, соответствующие регулярному выражению, будут собраны и проанализированы, оставьте пустым, чтобы собрать и проанализировать все страницы.
  • regex.imgInPage: массив, сохраняет регулярные выражения, используемые для указания страниц, содержащих изображения.
  • regex.href: массив, используемый для сопоставления ссылок на страницах.
  • regex.href.query: строка, сохранение селектора DOM ссылки.
  • regex.href.attr: строка, указание атрибута, содержащего адрес ссылки.

Компиляция

Для компиляции требуются пакеты golang.org/x/net и golang.org/x/text, доступные по ссылкам:

Принцип реализации

Принцип реализации.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xpan-lu-go_sexy.git
git@api.gitlife.ru:oschina-mirror/xpan-lu-go_sexy.git
oschina-mirror
xpan-lu-go_sexy
xpan-lu-go_sexy
master