본문 바로가기

머신러닝 & 텐서플로 & 파이썬

데이타 크롤링

반응형

준비하기



[bs4 install]


pip3 install --upgrade bs4


---------------------------------------


import urllib.requset 

import urllib.parse


url ="http://xxx.xxx.xxx/img/test.png"

savename="test.png"

#download

urllib.request.urlretrieve(url, savename )




#memory 로 로드

mem = urllib.requst.urlopen(url).read()


with open(savename, mode="wb") as f:

f.write(mem)

print("saved");






방식 : GET, POST, PUT, DELETE

대상 : http://media.daum.net   => 호스트 네임

추가정보

- 경로 : /photo-viewer

- 데이타: ?cid=318190#20170615103230763

요청 매개변수.


api = "https://search.naver.com/search.naver"

value ={

"where":"nexearch",

"sm":"top_hty",

"fbm":"1",

"ie":"utf8",

"query":"초콜릿"

}


params = urllib.parse.urlencode(values)


print (api)

print(params)


url = api +"?"+ params



data = urllib.request.urlopen(url).read()

text = data.decode("utf-8") // # euc-kr

print(text)




-------------------


BeautifulSoup   스크랩 툴.


pip BeautifulSoup


from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')



아래 두 함수 사용 css 선택자를 이용하여 선택하는 함수임.

 css 선택자를 알아야 함.

soup.select_one()

soup.select()


<html><body>

<div id="meigen">

<h1> 위키북스 도서</h1>

<ul class= "items art it book">  => class를 여러개 사용.

<li>유니티 게임 인문</li>

</ul>

</div>

</body></html>


css 선택자 :

tag 선택자  : 

 "ul", "div", 'li" ...

id 선택

 "#meigen"  =>id

 "#<id이름>"

class 선택자

 ".book.art.it.items"  => 점으로

 "ul.book"

".<클래스 이름>.<클래스 이름>.<클래스 이름>"


후손 선택자

"html li"

자식 선택자

"ul.items > li"ㄱ



list_items = soup.select("ul.items li")  # 요소 의 배열


header = soup.select_on("body > div > h1") # 요소


print(header.string)

#header.attrs["title"]


print(soup.select_one("ul").attrs)


for li in list_items:

print(li.string)


---------------------------------

기사에서 마우스 오른쪽 클릭 ->검사


url = "http://news.naver.com/main/main.nhn?mode=LSD&mid=shm..."

response = urllib.request.urlopen(url)

soup = BeautifulSoup(response, "html.parser")

results = soup.select("#section_body a")

for result in results:

print("제목:", results.attrs["title"])

print("링크:", result.attrs["href"])

print("")

url_article = result.attrs["href"]

response = urllib.request.urlopen(url_article)

soup_article = BeautifulSoup(response, "html.parser")

content = soup_article.select_one("#articleBodyContests")


#print(content.contents)  => 보기 않좋음

output=""

for item in content.contents:

#output += str(item) 

stripped = str(item).strip()

if stripped =="":

continue

if stripped[0] not in ["<","/"]:

output += str(item).strip()



printf(output.replace("본문 내용TV플레이어",""))



time.slee(1) # server에서 과부화 걸리면 ip 차단함.. 그래서 회피를 위해 sleep







----------------------------------

import requests


from bs4 import BeautifulSoup


print("start")

#url = "http://ecos.bok.or.kr/jsp/vis/keystat"

url = "http://ecos.bok.or.kr/jsp/vis/keystat/Key100Stat_n.jsp"

#url = "http://news.naver.com/"

proxies = {

'http': 'http://ip:port',

'https': 'https://ip:port',

}

#proxy = req.ProxyHandler({'http': '168.219.61.252:8080'})

r =  requests.post(url, proxies=proxies)


soup = BeautifulSoup(r.text,'lxml')

#with open("test.html", mode='wt') as f:

#    f.write(r.text)


print(r.text)


#results = soup.select("#section_body a")


results = soup.select('tr')



for res in results:

    print(res)


print("end")



------------------------------------