우연히 컴파일을 하면서 Subprocess Connection Error 라는 에러가 떴다.

 

IDLE's subprocess didn't make connection, See the 'Startup failure' section of the IDLE doc, online at https://docs.pthon.org/3/libray/idle.html#startup-failure라는 오류가 떴다. 

 

제가 뭐 만진 것도 없고 모듈을 삭제한 적도 프로세스를 삭제한 것도 없었다. 

문제가 된 이유는 파일이 엉키고 충돌된 것으로 판정됐다.

 

파이썬파일에 들어가서 (python38-32) .py에 관한 것을 옮겨 준다던가, 그 전에 했었을 때 오류가 난 것을 삭제해주면 된다 . 

or 아니면 하나씩 삭제해서 무슨 파일이 문제인지 확인해 주면된다. 

 

내 파일은 threading.py 이였는데 이 파일을 삭제해주니 말끔하게 실행이 됐다.

 

 

이상포스터를 마치겠습니다.

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0'}

url = "http://jolse.com/category/toners-mists/1019"
result = requests.get(url, headers=headers)


bs_obj = BeautifulSoup(result.content, "html.parser")

ul = bs_obj.find("ul", {"class":"prdList grid4"})
boxes = ul.findAll("div", {"class":"box"})

for box in boxes:
    print(box)
    

1탄을 못 보신 분들은 1탄을 보고 오시기 바랍니다.

 

이번에는 <div class = "box">를 찾아 보겠습니다. ul.findAll을 이용해 찾아보도록 하겠습니다.

 

소스코드는 다음과 같습니다.

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0'}

url = "http://jolse.com/category/toners-mists/1019"
result = requests.get(url, headers=headers)


bs_obj = BeautifulSoup(result.content, "html.parser")

ul = bs_obj.find("ul", {"class":"prdList grid4"})
boxes = ul.findAll("div", {"class":"box"})

for box in boxes:
   print(box)
    
    

 

결과는 다음과 같습니다.

다음은 이제 <p class = "name"의 제품명을 뽑아 내보겠습니다.

 

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0'}

url = "http://jolse.com/category/toners-mists/1019"
result = requests.get(url, headers=headers)


bs_obj = BeautifulSoup(result.content, "html.parser")

ul = bs_obj.find("ul", {"class":"prdList grid4"})
boxes = ul.findAll("div", {"class":"box"})

for box in boxes:
    ptag = box.find("p", {"class" : "name"})
    spans = ptag.findAll("span")
    print(spans)
    
    

 ㄱ결과는 다음과 같습니다.,

 

이제 여기서 제품명만 뽑아 보겠습니다.

https://best-mother-seonnyeo.tistory.com/27 1탄을 보고 오시길 바랍니다.

 

 

안녕하세요 파이썬 크롤링하다가 에러가 떴네요,, 결과적으로 해결하자면 

headers = {'User-Agent' : Mozilla/5.0'} 을 넣어주고 

result에 headers = headers)을 넣어줍니다.

그러면 해결이 됩니다.  

 

나의 에러부분

저는 jolse.com을 크롤링했는데요 결과는 에러가 떴네요.

해결할 방법은 위에 참고하기 바랍니다.

 

이상포스터를 마치겠습니다.

쇼핑몰 크롤링은 왜 할까요 ?  

저는 여러 곳에서 쇼핑몰을 본다고 했을 때 시간이 많이 걸리고 100개의 질과 제품을 각 사이트마다 들어가서 보기에는 큰 어려움이 있다고 생각합니다. 그래서 쇼핑몰 크롤링이 필요한 것 같습니다 . 

 

만약 쇼핑몰 크롤링 뿐만아니라 모든 페이지에 있는 데이터를 수집하고 싶을 때가 있을 것입니다. 그 때 사용하면 됩니다.

 

1. 데이터 수집할 웹사이트에 접속합니다.

 

http://jolse.com/

전 이 사이트를 이용해 크롤링하겠습니다. 

 

JOLSE

Korean Cosmetics Online Beauty Shop

jolse.com

메뉴에서 [SKINCARE -> Moisturizes -> Toners & Mists]에 있는 모든 화장품의 데이터를

수집해 보겠습니다.

 

 

 

이때의 사이트는 http://jolse.com/category/toners-mists/1019/

저 사이트(URL)를 기억해주기 바랍니다.

이제 1,2,3,4,5개의 페이중 1번페이지에 있는 모든 화장품의 이름과 가격을 수집해보겠습니다.

 

 

2. 페이지 불러오기 

사이트에 들어가 ctrl + shift + i를 눌른시면 관리자도구가 보입니다. 저기서 형광색을 클릭합니다. 

그런다음 상품갖다 되면 저런 형식으로 저기서 잘 안보이시지만 span태그와 오른쪽은 span style의 내용이 보이실 것입니다. 

 

 

전체적으로 커서를 놨을 때 왼쪽에 ul.prdList.grid4 보이고 오른쪽에도 <ul class = "prdList grid4"가 보입니다.

그런 다음 파이썬 코드로 갑시다 gogogo

 

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0'}

url = "http://jolse.com/category/toners-mists/1019"
result = requests.get(url, headers=headers)


bs_obj = BeautifulSoup(result.content, "html.parser")

ul = bs_obj.find("ul", {"class":"prdList grid4"})

print(ul)

나왔을 것 입니다. 궁금한 게 있으면 댓글 달아주시길 바랍니다~ 

 2탄에서 글 올리도록 하겠습니다. 

https://best-mother-seonnyeo.tistory.com/29

불러오는 중입니다...

이상포스터를 마치겠습니다.

안녕하세요 3구입니다. 오늘의 내용은 네이버의 네비게이션 바 파싱하기입니다.  일단 밑에 사진처럼 메일, 카페, 블로그 ~TV까지 파싱할 예정입니다. 

일단 네이버에 들어가줍니다. 

 

네이버에 들어가서 ctrl + shift + i 를 눌러줍니다. 그러면 저런 형태로 보이게 됩니다.

그런 다음 1번을 클릭해준다음에 마우스를 메일, 카페~ TV에  갖다 놓으면 an_l이라는

문구가 보일 것입니다.

 

 

 

 

지금부터 메일 ~TV만 읽어서 파싱해보겠습니다.

import urllib.request
import bs4

url = "https://www.naver.com/" # 네이버의 url 
html = urllib.request.urlopen(url)  

bs_obj = bs4.BeautifulSoup(html, "html.parser") # 네이버를 읽어 옵니다.
 
ul = bs_obj.find("ul", {"class":"an_l"}) 
lis = ul.findAll("li")

for li in lis:
    a_tag = li.find("a")
    span = a_tag.find("span", {"class" : "an_txt"})
    print(span.text)
    

 

ul = bs_obj.find("ul", {"class":"an_l"})의 내용을 설명 드리겠습니다.

bs_obj(네이버 읽어온 것)에서 find를 이용해 찾습니다. ul을 찾고 classs의 an_l을 찾아서 ul변수라는 값에 저장해줍니다.

 

그런 다음 lis변수라는 값 안에 li의 모든 것(findAll)을 찾습니다.

 

그런 다음 for문을 이용해 출력합니다. 

a_tag = li.find("a")  lis의 부분의 "a"라는 것을 찾고 

span = a_tag.find("span", {"class" :"an_txt"})의 a를 찾았고

span의 class:an_txt를 찾습니다.

 print(span.text)를 이용해 출력합니다.

결과는 다음가 같습니다.

 

이상포스터를 마치겠습니다.

thread(쓰레드) 

 

파이썬은 하나의 쓰레드에서 실행됩니다. 즉, 코드를 순차적으로 실행합니다.  코드를 병렬로 실행하기 위해서는 별도의 쓰레드를 생성해야 하는데, 파이썬에서 쓰레드를 생성하기 위해서는 threading 모듈의 High레벨과 thread 모듈의 Low레벨을 사용할 수 있습니다. 주로 쓰는 것이 threading 모듈의 High레벨입니다.

 

파이썬은 전역인터프리터락킹(Global Interpreter Lock)때문에 특정 시점에 하나의 파이썬 코드만을 실행하게 됩니다.

그래서 파이썬은 다중 CPU 환경에서 동시에 여러 파이썬 코드를 병렬로 실행 할 수 없습니다. 인터리빙(Interleaving)방식으로 코드를 분할해서 실행합니다. 

 

다중 CPU를 병렬을 실행하기 위해서는 다중 프로세스를 이용하는 Multiprocessing 모듈을 사용합니다.

 

threading 모듈 

쓰레드를 실행하기 위해서는 therading 모듈의 threading.Thread()함수를 호출하여 Thread 객체를 얻은 후 Thread 객체의 start() 메서드를 호출하면 됩니다. 

 

서브쓰레드는 함수, 메서드 둘 중에 하나 실행하는데 구현 방식은

첫 번째로 쓰레드가 실행할 함수 혹은 메서드를 작성

두 번째로 Threading.Thread로부터 파생된 파생클래스를 작성하여 사용하는 방식이 있다.

 

데몬 쓰레드

Thread 클래스에서 daemon 속성은 서브쓰레드가 데몬 쓰레드인지 아닌지를 지정하는 것인데,

데몬쓰레드란 백그라운드에서 실행되는 쓰레드로 메인 쓰레드가 종료되면 즉시 종료되는 쓰레드이다. 반면 데몬 쓰레드가 아니면 해당 서브쓰레드는 메인 쓰레드가 종료할 지랃 자신의 작업이 끝날 때까지 계속 실행딘다.

 

 

 

이상포스터를 마치겠습니다.

Selenium? 

웹 브라우져를 컨트롤하여 웹 UI를 Automation 하는 도구 중의 하나입니다.  
Selenium의 두 종류가 있습니다.

Selenium Server와 Selenium Client가 있습니다.

Selenium Client은 로컬 컴퓨터의 웹 브라우져를 컨트롤 하기 위해서 Selenium Client를 사용합니다.
Selenium Client는 WebDriver라는 공통 인터페이스(Common interface)와 각 브라우저 타입별(Chorme, exploer, 사파리 등)로 하나씩 있는 Browser Driver로 구성되어 잇습니다. 

Selenium을 설치하겠습니다.

설치를 위해서 윈도우 + R을 눌러 cmd을 쳐 주시기 바랍니다. 

admin> pip install selenium 

 

만약 오류가 뜨게 된다면 환경변수를 설정 안 하셧거나 등의 문제입니다. 그럴 때는 파이썬이 깔려 있는 곳에 디렉터리를 가서 pip install selenium을 쳐 주시기 바랍니다. 

 

다음으로 Selenium 드라이버를 설치했다면 해당 드라이버의 경로를 실행  PATH에 넣어줘야 합니다. 저는 Chrome을 사용하겠습니다.

 

 Firefox : https://github.com/mozilla/geckodriver/releases

Chrome : https://sites.google.com/a/chromium.org/chromedriver/downloads

1번 -> 설정 -> Chrome 정보 

Chrome : https://sites.google.com/a/chromium.org/chromedriver/downloads

다시 들어간 뒤  저는 80. 버전이니 80버전 으로 다운 받겠습니다. 

 

 

 

다운 받은 뒤 압축을 풀어줍니다. 다운로드 폴더에서 실행시키지 말고 다른 곳에서 실행시키기 바랍니다. 

저는 Users/ admin에서 실행시키겠습니다. 

 

Selenium 사용법

결과 

webdriver가 실행되면서 홈페이지가 켜지게 됩니다.

그 페이지가 안 뜰 수 있는데 클릭 한 번 하면 naver.com로 넘어갑니다. 

 

 

Selenium의 특정 요소 및 메서드에 대해서 설명드리겠습니다.

Selenium은 웹페이지 내의 특정 요소를 찾는 많은 메서드를 제공하고 있습니다.

보통 한 요소를 리턴하는 find_element_*(), 복수 요소를 리턴하는 find_elements_*() 메서드로 구분됩니다.

 

예를 들어서 특정태그 id로 검색하는 find_element_by_id(), 특정 태그 name로 검색하는 find_element_by_name(), Css클래스명으로 검색했을 때는 find_element_by_class_name() 등이 있습니다. 

만약 예상되는 결과가 복수이면 find_element_* 대신 find_elements_*를 사용합니다.

 

왼쪽에 있는 Python, PSF, DOCS, PYPI, Jobs, Community를 출력해보겠습니다.

오른쪽은 ctrl + shift + i 를 눌르면 보입니다. 

소스코드는 다음과 같습니다.

from selenium import webdriver
import time


driver = webdriver.Chrome('C:\\Users\\admin\\chromedriver.exe')
# webriver.Chrome()를 호출하여 브라우저를 실행시킵니다. 
driver.get("http://python.org")
# 브라우저를 띄운 상태에서 특정 웹사이트로 이동하기 위해서 get()메서드를 사용

menus = driver.find_elements_by_css_selector("#top ul.menu li")
#div의 top 에 ul class = "menu에서 li을 menus에 넣어라, 

pypi = None
for m in menus:
    if m.text =="PyPI":
        pypi = m
    print(m.text)

pypi.click() # 클릭

time.sleep(5) #5초 대기
browser.quit() #브라우저 종료 

 

결과

 

이상포스터를 마치겠습니다.

오늘은 네이버에서 특정 글자 추출 및 네이버을 파싱 해보겠습니다.

 

1. 네이버에서 특정 글자 추출을 먼저 해보겠습니다.

 

import bs4

html_str = """
<html>
    <body>
        <ul class = "ko">
            <li>
                <a href="https:://www.naver.com/">네이버</a>
            </li>
            <li>
        </ul>
        <ul class ="sns">
            <li>
                <a href="https://www.google.com/">구글</a>
            </li>
            <li>
                <a href="https://www.facebook.com/">페이스북</a>
            </li>
        </ul>
    </body>
</html>
"""

bs_obj = bs4.BeautifulSoup(html_str, "html.parser")
atag = bs_obj.find("a")
print(atag)

print("\n")

# https://www.naver.com/만 출력하고 싶으면

print(atag['href']) #href속성의 속성 값을 뽑는 코드 

 결과는 다음과 같습니다.

 

딱히 설명드릴 게 없습니다. <"html"> ~~~ """까지는 html문서이고

그 뒤로는 파이썬 문법입니다. 또한 BeautifulSoup을 사용했습니다. 

 

BeautifulSoup(html, "html.paser")에 대해 설명드리겠습니다.  .BeautifulSoup(<받은 테스트>,

<텍스트를 파싱할 파서>)에는 총 2가지 값이 들어갑니다.

 

 

1. 값이 웹에서 받은 텍스트입니다. 2."html.parser"는 웹 문서의 대부분은 HTML로 되어 있기

때문에 "html.parser"을 사용합니다. parser는 데이터를 뽑아내는(파싱) 프로그램입니다. 

 

즉, 파이썬에서 HTML 안에 들어 있는 텍스트를 인식할 때 HTML 형식으로 인식하라는

뜻입니다. 

 

이번에는 네이버를 전체적으로 파싱해보겠습니다.

 

import urllib.request # url을 요청
import bs4 # beautifuleSoup 4 

url = "https://www.naver.com/"
html = urllib.request.urlopen(url) 

bs_obj = bs4.BeautifulSoup(html, "html.parser")

print(bs_obj)

 

 

 

이상포스터를 마치겠습니다. 제 블로그에 크롤링하는 게 많으니 한 번 보시길 바랍니다.

+ Recent posts