[PHP] skechers.com 스크래핑 웹페이지 소스 얻기

[PHP] skechers.com 스크래핑 웹페이지 소스 얻기

CSharp, PHP
# 요구사항 1. 전체 상품을 모두 가져와야 한다. 2. 각 상품의 모든 보여주는 이미즈를 모두 저장해야 한다. 3. 각 상품의 고유한 정보는 정리해서 모두 등록한다. # 작업환경 Visual Stuido 2013 C# WinForm, MySQL PHP 7.0.4 (cli) 초기 작업은 C#으로 이줘졌지만은 이후 작업은 Local에서 순수 PHP (cli)만드로 작업이 되었습니다. 1. 각 상품의 대분류에 따라서 이미지 저장을 달리함. 일단 영문자, - 외에는 모두 제거 하여서 Web상에서 사용할 경우에도 주소를 획일한 시켜드림 각 이미지 파일은 원본 사이트의 순수 이름 그대로 인용하여서 처리 하였습니다. 2. 각 상품상세정보 페이지에서 가져온 원본 소스와 해당 정보를 추리하는 JSON값을 추출하여서 별도로 분리하여서, 웹스크래핑 당시의 전체 웹페이지를 눈으로 확인 할 수 있습니다. 아울러 JSON으로 별도로 저장해서 상품상세페이지에서 정보를 한눈에 볼 수 있도록 파일을 만들어 드렸습니다. 아래의 캡쳐 화면은 원본 사이트의 순서 소스를 그대로 저정한 화면이기때문에 바로 로컬에서 웹페지를 확인해…
Read More
[C#] 연봉정보 검색 후 상세정보 수집

[C#] 연봉정보 검색 후 상세정보 수집

CSharp
[C#] 연봉정보 검색 후 상세정보 수집 Jobkorea의 연봉검색을 통해서 전체 기업명과, 기업의 연봉정보를 직급결로 수집하는것입니다. 한번에 전체 수집도 있지만, 개별적으로 검색해서 수집을 할 수 있는 기능을 포함을 요청 하였습니다. 작업환경 Visual Studio 2013 C# WinForm HtmlAgilityPack 라이브러리 사용 요구사항 1. Jobkorea 로그인 하여서 연봉 검색후 파일 저장 요청 2. 전체 기업 목록을 수집 3. 원하는 기업 검색후 해당 기업만 선택후 수집 4. 각 기업의 상세정보의 직급별 정보를 요청함 작업 화면 (※ 작업화면의 결과는 일반적으로 공개되지 않으면은 일부 내용을 삭제 처리하여서 난독화 시켜 놓습니다.) 1. 초기 화면 1-1. 연봉 전체 검색시 화면 1-2. 개별 검색 화면 2. 목록 파일 생성 결과 화면 해당 목록의 파일을 생성합니다. 중복을 최대한 억제하기 위해서 개별적으로 날짜와 시간을 넣어서 파일명의 동일할 경우에 덮어쓰지 않도록 하였습니다. 파일은 CSV(Tab 구분)으로 생성하여서 파일을 생성한 화면 입니다. 3. 개별 상세…
Read More

[PHP] fopen 옵션 정리

PHP
[PHP] fopen 옵션 정리 기본적으로 fopne 옵션을 사용할때 사용하는 옵션을 정리해 놓은것입니다.간단하게 쓰이지만 매번 잊어 먹어서 한번 정리를 해 놓습니다. "r" : 읽기 전용 모드. 파일이 없으면 NULL return."w" :쓰기 전용 모드. 파일이 없으면 생성되고 있으면 내용이 없어진다."a" : append모드. 파일이 없으면 생성. 이미 존재하는 파일 끝부분에 file pointer가 위치하게 되며 이 위치부터 뒷쪽으로만 write가능. 읽기는 불가능. fseek등으로 이 부분보다 앞으로 file pointer를 이동시키면 어떻게 될까 ? 아래 내용으로 봐서는 fseek등으로 file pointer를 이동하여도 이와 상관없이 파일 끝부분에 write가 되는 것으로 생각됨. "r+" : 읽고 쓰기 모드, 파일이 없으면 NULL return."w+" : 읽고 쓰기 모드 단, 파일이 없으면 만들고 있으면 기존 내용을 지움. write를 먼저 한 후 동일 파일 포인터로 읽기 수행이 필요한 경우 사용. 보통은 읽기 전용, 혹은 쓰기 전용으로 fopen하므로 w+가 필요한 일은 별로 없을 듯."a+" : append모드,…
Read More
[C#] skechers.com 스크래핑 웹페이지 Source 크롤링

[C#] skechers.com 스크래핑 웹페이지 Source 크롤링

CSharp
# 요구사항1. 전체 상품을 모두 가져와야 한다.2. 각 상품의 모든 보여주는 이미즈를 모두 저장해야 한다.3. 각 상품의 고유한 정보는 정리해서 모두 등록한다. # 작업환경Visual Stuido 2013 C# WinForm, MySQLPHP 7.0.4 (cli) skechers.com 작업은 조금 귀찮은 작업으로 이뤄졌습니다.일단 AJAX로 json 값을 가져와서 페이지에 로딩하기때문에 한번에 HTML 소스를 가져오지 못하였습니다. 위 사진과 같이 상품 진열 페이지가 일반적으로 보면은 웹페이지만은 AJAX로 추가되기 때문에 소스를 가져오는 방식이 조금 사물 다릅니다. 각 상품의 URL 주소를 번호를 주어서 아래와 같이 저장을 하여서 1~* 까지 번호로 저장을 하였습니다.물론 각기 원하는 방식으로 저장도 되지만은 숫자가 가장 편한 작업니다. 이후에 작업은 C#에서 처리 하지 않았습니다.PHP로 LOCAL로 처리 하였습니다
Read More

[C#] Webbrowser의 스크롤을 가장 하단으로 보내기

CSharp
웹브라우저를 사용할 경우에 가로 스크롤를 가장 하단으로 보내는것입니다. #파라미터 Bool # true : Top # false : bootom webBrowser1.Document.Body.ScrollIntoView(false); 사용하는 목적은 가로 스크롤이 길 경우에 화면에 보이는 부분을 가장 하단으로 하여서 지표를 보기 위해서 입니다.
Read More
[C#] 네이버 카페 글 목록 및 내용 수집

[C#] 네이버 카페 글 목록 및 내용 수집

CSharp
네이버 카페 글 목록 및 내용 수집 요청하신분이 네이버 카페인 '중고나라'의 게시물 수집을 요청하였습니다.그외에 요구 사항은 없었으며, 단순하게 수집해서 파일을 기록하는 작업입니다. 작업환경Visual Studio 2013, HtmlAgilityPack  사용 요구사항1. 네이버 로그인 처리2. 카페 특정 게시판 글 수집 ( 파일로 생성)3. 글 수집된 게시물의 내용 수집 ( 파일로 생성) 1. 프로그램 실행 화면 글 목록 수집 화면 2. 글 제목 저장 목록 (파일로 저장) 3. 글 내용 저장 목록 및 소스4. 글 내용 페이지 이렇게 구성 되어 있습니다. 해당 항목을 가지고 다른사람이 key값을 설정해서 다시 DB 작업을 하게 될 것 같습니다. 이 글이 작성된 시기는 2016년 3월 경이며, 제가 작업해드린분의 내용을 바로 공개 할 수 없어서 블로그 내용을 비공개로 해두다가 지금은 공개해도 될것 같아서 공개 합니다.그렇다고 하여서 소스를 공개 하는것은 아닙니다. 웹스크래핑 작업은 소스를 공개해서 무분별하게 도용되는 것을 막기 소스 공개를 하지 않는것이…
Read More

[C#] Using HTML Agility pack

CSharp
C# Using HTML Agility pack ExpressionDescriptionnodenameSelects all child nodes of the named node지정된 노드의 모든 자식 노드를 선택합니다/Selects from the root node루트 노드로부터 선택//Selects nodes in the document from the current node that match the selection no matter where they are상관없이 그들이 어디에 선택과 일치하는 현재 노드에서 문서의 노드를 선택하지 않습니다.Selects the current node현재 노드를 선택합니다..Selects the parent of the current node현재 노드의 부모를 선택@Selects attributes속성을 선택합니다 간단하게 설명을 기록하였습니다.매번 찾기보다는 블로그에 남겨 놓기 위해서 입니다.
Read More
[Windows] 바탕화면 Icon 캐쉬값 조정

[Windows] 바탕화면 Icon 캐쉬값 조정

Windows
윈도우 이용시에 바탕화면의 아이콘들이 로딩이 느려서 빠르게 로딩하기 위해서 캐쉬값을 조정해야 합니다. #위치 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer 해당 위치에 가셔서 값들중 "Max Cached Icons"가 없으면은 문자열 값을 새롭게 만들어 주시기 바랍니다.이후에 해당 값을 "4096"(4MB) 혹은 "8192"(8MB)로 입력 하시면 됩니다. 물론 저장하시고 컴퓨터를 재시작 하셔야 적용되기 때문에 꼭 재시작 하시기 바랍니다. 이후에 해당 사항의 적용이 마음에 들지 않는다면은 "Max Cached Icons" 을 삭제 하시거나, 혹은 Default 값인 "500"으로 설정 하시면 됩니다. 출처 : http://slic.tistory.com/877,http://manian.com/lecture/7168592
Read More

[PHP] HTML문자중 특정 문자 치환하기

PHP
[PHP] HTML문자중 특정 문자 삭제 하기 // 유니코드 삭제 처리 function getDeleteUnicodeStr($str) { $str = preg_replace('@\x{0007}@u', ' ', $str); $str = preg_replace('@\x{0008}@u', ' ', $str); $str = preg_replace('@\x{000E}@u', ' ', $str); $str = preg_replace('/​/i', ' ', $str); return $str; }
Read More
[PHP] SHOEZOO 사이트 스크래핑

[PHP] SHOEZOO 사이트 스크래핑

PHP
[PHP] SHOEZOO 사이트 스크래핑 해당 사이트의 정보를 스크래핑 하여서 가공을 하는 작업입니다. 보시는것처럼 다양한 메뉴가 존재 하지만 원하는 정보를 가져오기 위해서는 각 링크의 속성이나 HTML 태그를 분석해야 합니다. 이번에는 간단하게 할 수 없는것이 브랜드와 사이즈도 있고 사용자가 선택할수 있는 정보가 많습니다. 일단은 목록페이지에서는 각 제품의 링크를 획득한 후에 다시 한번더 제품 상세 페이지에 들어가서 정보를 정확하게 수집을 해야 합니다. 제품 상세페이지를 보시면은 이미지도 5장정도 되고, 사이트를 선택할 수도 있어서 해당 옵션을 모두 가져와서 그에 맞게 각 데이터를 가공해야 합니다. 이 작업이 보기보다 상당히 시간이 소요 되며, 해당 작업을 위해서는 DB를 이용하여서 중복이나 동일이름이지만은 브랜드나 옵션이 다른것을 구분해서 작업을 해야 합니다. 스크래핑을 원하시는분은 공지사항을 참조해주시기 바랍니다.
Read More

[C#] 내장 IE 랜더링시 a 태그 새창을 현재창으로 하기

CSharp
[C#] 내장 IE 랜더링시 a 태그 새창을 현재창으로 하기 webbrowser을 이용할 경우에 HTML 태그에서 A 링크가 새창을 바로면은 바로 윈도우 기본 브라우저로 띄워 버립니다.이렇게 될 경우에 원하는 자료를 다시 받으려면은 URL를 다시 이동하거나 해야 하는데 그냥 새창 필요없이 바로 현재창의 페이지를 변경해서 나오도록 하는것입니다. // 새창을 내부에서 처리 하기 private void webBrowser1_NewWindow(object sender, CancelEventArgs e) { string newUrl = webBrowser1.StatusText.ToString(); webBrowser1.Navigate(newUrl ); e.Cancel = true; }
Read More

[PHP] 티스토리 스킨 텍스트큐브에 적용하기

PHP
[PHP] 티스토리 스킨 텍스트큐브에 적용하기 티스토리용 스킨이 마음에 드는것이 있어서 가져와서 적용을해보니 되지 않는 부분이 너무 많았습니다.스킨파일이 HTML 파일에 대해서는 적절하게 수정을 하면은 사용을 할 수 있지만은 치환자에 대해서는 어떻게 손쓸 방법이 없어서... 결국은 PHP 파일을 수정하게 되었습니다. 해당위치에 파일의 원본을 최대한 보전하면서, 스킨의 기능을 이용하기 위해서 수정한것입니다.그래서인지 속도는 다소 느려지는 편입니다. 파일 위치 : interface/common/blog/list.php <!--?php /// Copyright (c) 2004-2016, Needlworks / Tatter Network Foundation /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) if (!empty($listView)) { dress('list', $listView, $view); } else if (isset($list) && isset($skin)) { // 블로그 ID 가져오기 $blog_id = $context->getProperty('blog.id'); $listView = $skin->list; $itemsView = ''; foreach ($list['items'] as $item) { // 각 글의 페이지 정보를 획득 하도록 함. list($entries, $paging) = getEntryWithPaging($blogid, $item['id']);…
Read More

[MySQL] MySQL 최대 접속수 설정하기

Database
MySQL 최대 접속수 설정하기 ERROR 1040 (08004): Too many connections 에러발생시 해결법 mysql을 재시작 하지 않고 바로 설정 방법 #mysql 을 재시작 안해도 max_connections 값이 바로 적용된다. mysql> set global max_connections=300; mysql 설정파일(my.ini 또는 my.cnf ) 방법 #mysql을 재시작 해 주어야 한다. [mysqld] max_connections = 300 MySQL 접속수 관련 상태를 확인하는 방법 mysql> show variables like '%max_connect%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 10000 | | max_connections | 100 | +--------------------+-------+ mysql> show status like '%CONNECT%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Aborted_connects | 200 | | Connections | 300 | | Max_used_connections | 101 | ==> 현재 연결된 접속수 | Ssl_client_connects | 0 | | Ssl_connect_renegotiates | 0 | | Ssl_finished_connects | 0 | | Threads_connected | 101 | ==> 연결되었던 최대 접속수…
Read More

[C#] 모니터 off 하기

CSharp
[C#] 모니터 off 하기 public partial class MainForm : Form { const int WM_SYSCOMMAND = 0x0112; const int SC_MONITORPOWER = 0xF170; const int MONITOR_ON = -1; const int MONITOR_OFF = 2; const int MONITOR_STANBY = 1; [DllImport("user32.dll")] private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam); public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { Console.WriteLine(this.Handle.ToInt32()); int ScreenHeight = 0; System.Windows.Forms.Screen[] screens = System.Windows.Forms.Screen.AllScreens; if (screens.Length >= 1) { foreach (Screen screen in screens) { if (screen.Primary) { ScreenHeight = screen.Bounds.Height; Console.WriteLine(ScreenHeight); } } } else { ScreenHeight = screens[0].Bounds.Height; } } // 모니터 Off private void button1_Click(object sender, EventArgs e) { SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF); } }
Read More