네이버 실시간 검색어를 크롤링 해보자! 하고 해보고 있는데...
beautifulsoup 라이브러리를 다운받은 후 bs4가 없기 때문에 터미널 창에
->pip install bs4
를 사용하여 다운 받았다.
이제 한번 써보자!
span태그에 있는 것들이 정상적으로 나왔다.
이제 네이버에 있는 실검을 가져와야한다.
class = keyword고 태그가 span태그 이다.
변경 후 실행 하였지만 아무것도 나오지 않았다.. 왜 안될까? 하고 검색을 해보던 중.
https://www.inflearn.com/questions/22012
이런 글이 있었다. 즉, 2020-01-17 부로 네이버 실검이 ajax통신 방식으로 변경 되었다는거다. 해당 데이터가 html에 직접 뿌려주는걸 받아와서 쓰면 위 코드가 정상적으로 작동하지만 ajax방식으로 변경됨에 따라 위 코드로 실검이 가져와지지 않는 것 이였다.
주소창 아래에 친절히 수정코드도 있어 참고를 해보았다.
바로 아래 방법은
https://jaeho0613.tistory.com/112
이곳을 참고 하였다.
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main'
res = requests.get(url, headers = headers)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('span.item_title')
for item in data:
print(item.get_text())
이러한 방법과
인프런에서 나온 방법으로는
저 주소로 들어가보니
이렇게 받아오고 있었다.
그리고 json에서 data의 항목의 값만 출력
데이터 값만 출력하고 있다.
여기서 rank 는 1, keyword 는 요요미, keyword_synonyms 는 []이렇게 되어 있다. 여기서 나는 keyword를 사용하여 값을 가져올 것이다.
keyword값만 확실히 가져왔다.
사실상 이 방법은 Beautifulsoup라이브러리를 사용하지 않고 json데이터를 직접 가져온 것 이다.
import requests
json = requests.get("https://www.naver.com/srchrank?frm=main").json()
# print(json)
ranks = json.get("data")
# print(ranks)
for r in ranks:
keyword = r.get("keyword")
print(keyword)
따라서 크롤링은 맨 위에 방법으로 가져오는게 맞는거 같다.
'코딩 > Python' 카테고리의 다른 글
파이썬 pickle 모듈 (0) | 2020.07.09 |
---|---|
파이썬 내장 함수 모음(python function) (0) | 2020.07.08 |
python에서 __init__.py의 용도 (0) | 2020.07.07 |
파이썬 튜플 한개만 추가 할때 (0) | 2020.07.04 |
파이썬 함수 (0) | 2020.07.03 |