2019. 9. 29.

[python] 위키피디아 데이터 수집 후 DB에 저장

위키피디아 데이터 수집 후 DB에 저장하는 파이썬 코드

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import datetime
import random
import pymysql

conn = pymysql.connect(host='127.0.0.1',user='root',passwd='2kdskfk1!@', db='scraping', charset='utf8')

cur = conn.cursor()
cur.execute("USE scraping")
random.seed(datetime.datetime.now())

def store(title, content):
cur.execute(
"INSERT INTO pages (title, content) VALUES (\"%s\", \"%s\")", (title, content)
)
cur.connection.commit()

def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html, "html.parser")
title = bsObj.find("h1").get_text()
content = bsObj.find("div", {"id":"mw-content-text"}).find("p").get_text()
store(title, content)
return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))

links = getLinks('/wiki/Kevin_Bacon')
try :
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
print(newArticle)
links = getLinks(newArticle)
finally:
cur.close()
conn.close()

기본적인 테스트기 때문에 불필요한 값들이 많이 들어가있는 것을 볼 수 있다.


Continue reading

[python] mysql 과 파이썬 연동

파이썬에서 mysql 을 사용하려면 pymysql 모듈을 pip로 설치해야 한다.

import pymysql
conn = pymysql.connect(host='localhost', user='root', passwd='비밀번호', db='scraping')

cur = conn.cursor()
cur.execute("SELECT * FROM pages WHERE id=1")
print(cur.fetchall())
cur.close()
conn.close()


Continue reading

2019. 9. 28.

MYSQL 개발 툴로 접속이 안될때

mysql 을 설치하고 나서, cmd command 에서는 접속이 잘되는데,  개발 툴 ( 나의 경우엔 toad for mysql ) 로는 접속이 안된다. 

해결 방안은 다음과 같다. 

1. mysql installer - community 를 설치
2. mysql server 에서 Reconfigure 클릭
3. use Legacy Authentication Method 선택
 

Continue reading

2019. 9. 24.

웹 서버와 구조의 이해

웹 애플리케이션 서버와 웹 프레임워크 구조의 이해

웹 애플리케이션 서버는 정적 페이지와 동적페이지 요청을 모두 처리할 수 있다. 정적 페이지는 html, javascript, css 처럼 미리 작성되어 있어 서버 측의 실행이 요구되지 않는 응답 페이지를 의미하며, 동적 페이지는 서버 측에서 무엇인가를 실행해 요청에 따라 생성되는 응답 페이지를 의미한다.

웹 서버는 사용자의 요청을 수신하면 로컬 저장소의 경로에서 해당 파일을 찾아 응답(Response)한다. 하지만 동적인 요청을 수신하게 되면 동적 요청을 처리할 수 있는 웹 애플리케이션을 호출하게 되는데 PHP는 라이브러리.so 형태로 ASP는 동적링크파일인 dll, JSP는 자바 클래스로 변환되어 class 형태로 기능을 구현해 서비스한다.

서블릿은 웹 서비스를 위한 인터페이스로 HTTP 요청을 처리할 수 있는 규격이다. 서블릿은 독자적으로 실행되지 않고 서블릿 컨테이너에 등록된 후 서블릿 컨테이너에 의해 생성 호출 소멸된다. JSP는 HTML 과 자바 코드를 혼용해 사용할 수 있도록 정의된 텍스트 파일로 JSP 파일이 실행되기 위해서는 먼저 서블릿 클래스로 변환 작업이 이뤄줘야 한다.

서블릿 컨테이너는 서블릿을 관리하며 네트워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬 처리를 수행하는 JVM이다. 서블릿 컨테이너는 웹 요청을 처리하기 때문에 웹 컨테이너라고 부르기도 한다.


위 그림은 애플리케이션 서버의 처리 구조를 도식화 한 것으로 사용자가 JSP 를 요청하면 서블릿 컨테이너는 먼저 JSP 를 서블릿 클래스로 변환해 서블릿 컨테이너에 로드한다. 서블릿 컨이너는 사용자의 요청을 HttpServletRequest 객체로 생성하고 응답을 위해 HttpServletRequest 객체를 생성해 요청을 처리할 서블릿에 전달한다. 서블릿 클래스는 처리 결과를 HttpServlet Response 객체의 출력 스트림을 통해 반환한다.

Continue reading

2019. 9. 23.

[python] 웹 크롤링, 네이버 웹툰 제목

from bs4 import BeautifulSoup
from pprint import pprint
import requests

html = requests.get("http://comic.naver.com/webtoon/weekday.nhn")

bsObj = BeautifulSoup(html.text, "html.parser")
#첫번째 가공
date1 = bsObj.find('div',{'class':'col_inner'})
#print(date1)

#두번째 가공

date2 = date1.findAll('a',{"class":"title"})
#print(date2)

for name in date2 :
print(name.get_text())

'''
for name in bsObj.find('div',{'class':'col_inner'}).findAll("a", {"class":"title"}) :
print(name.attrs["title"])
'''

Continue reading

2019. 9. 22.

[python] 홈페이지 전체 페이지 크롤링

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

pages = set()

def linkUrl(addrUrl) :
html = urlopen("https://en.m.wikipedia.org/wiki/Main_Page")
bsObj = BeautifulSoup(html.read(), "html.parser")
for i in bsObj.findAll("a",href=re.compile("(^/wiki/)")) :
if "href" in i.attrs :
if i.attrs["href"] not in pages :
newPages = i.attrs["href"]
pages.add(newPages)
print(newPages)
linkUrl(newPages)
linkUrl("")

Continue reading

[python] 현재 사이트에서 랜덤으로 외부 사이트 링크 타고 가기

현재 사이트에서 a href 목록을 수집하여 외부사이트를 선별하여 링크를 출력한다.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse
import random
import datetime

pages = set()
random.seed(datetime.datetime.now())

def internalLinks(bsObj, host) :
internalLink = []
#/로 시작하거나 중간에 루트 도메인 주소가 포함된 링크를 찾는다.
for link in bsObj.findAll("a", href=re.compile("(^/|.*"+host+")")) :
if link.attrs["href"] is not None :
if link.attrs["href"] not in internalLink :
if link.attrs["href"].startswith("/") :
internalLink.append(host+link.attrs["href"])
else :
internalLink.append(link.attrs["href"])
return internalLink

def externalLinks(bsObj, host) :
externalLink = []
for link in bsObj.findAll("a", {"href":re.compile("^(http|www)((?!"+host+").)*$")}) :
if link.attrs["href"] is not None :
externalLink.append(link.attrs["href"])
return externalLink


def getRandomExternalLink(firstUrl) :
html = urlopen(firstUrl)
bsObj = BeautifulSoup(html.read(), "html.parser")
#print(urlparse(firstUrl).netloc)
externalLink1 = externalLinks(bsObj, urlparse(firstUrl).netloc)
if len(externalLink1) == 0 :
domain = urlparse(firstUrl).scheme+"://"+urlparse(firstUrl).netloc
internalLink1 = internalLinks(bsObj, domain)
return externalLinks(random.randint(0, len(internalLink1)-1))
else :
return externalLink1[random.randint(0, len(externalLink1)-1)]

def followExternalOnly(firstUrl) :
choiceOne = getRandomExternalLink(firstUrl)
print("******** random externalLink is",choiceOne)
followExternalOnly(choiceOne)
followExternalOnly("https://www.oreilly.com")


#test("www.naver.com")
#>>> a = urllib.request.urlopen(b'http://www.google.com'.decode('ASCII')).read()

Continue reading

[python] 다음 실시간 검색어 리스트 추출

# 다음 실시간 검색어 순위 목록 추출
from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("https://m.daum.net/?nil_top=mobile")

bsObs = BeautifulSoup(html.read(), "html.parser")

for i in bsObs.find("div",{"class":"keyissue_area"}).findAll("span",{"class":"txt_issue"}) :
print(i.get_text())

Continue reading

2019. 9. 17.

[python] 위키백과 정찰

 # 위키백과 최초 페이지에서 랜덤으로 링크페이지에 접속하여 링크가 없을때까지 반복하는 프로그램
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import random
import datetime
random.seed(datetime.datetime.now())



def linkaddr(addr) :
listing = []
html = urlopen("http://en.wikipedia.org"+addr)

bsObj = BeautifulSoup(html.read(), "html.parser")

for link in bsObj.find("div", {"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$")) :
if 'href' in link.attrs :
listing.append(link.attrs['href'])
return listing

links = []
links = linkaddr("/wiki/kevin_Bacon")
while len(links) > 0 :
a = links[random.randint(0, len(links)-1)]
print(a)
linkaddr(a)

Continue reading

Popular Posts

Recent Posts

Powered by Blogger.