1. 반대로 bs4를 이용해서 저번에 만든
소스 코드를 따오는것을 태그만 남게 가공한후
2. Perplexity에게 넘기면 좀 더 쉽게
분석 할수 있지 않을까?
이번 시간에는 태그정보를 수집하기
지난시간 파트2에서는 원하는 웹페이지에서
소스코드를
requests.get("http...")
태그정보 수집하기 - 원하는 웹페이지 소스 수집한후
필요한 태그 정보 내 소스만 탐색하는 방법을 실습을 통해
학습
bs = bs4.BeautifulSoup(html,"html.parser")
#div 태그 찾기
divs = bs.find or findAll("태그명")
import requests //리퀘스트로 내가 웹에다 요청을 보내서
일단 소스코드를 다 가지고 그걸 이쁘게 태그만 추출을 한다.
import bs4 // 그걸 이쁘게 태그만 추출하는 모듈,라이브러리
resp = requests.get("https://sparkkorea.com/퀴즈")
html = resp.text // 원본을 다 텍스트로 다 가져옴
bs = bs4.BeautifulSoup(html, "html.parser")
//이 html을 html Parser을 통해 추출하겠다.
이 bs 에서 어떻게 중요한 태그만 가져올수있느냐?
1. 태그명으로 소스 수집하기
2. a태그만 알고 싶다.
bs.find(name = "태그명")
맨앞에있는것만
bs.findAll(name = "태그명")
전부 다 찾음
div태그를 찾는게 핵심이지만 어떤 기준과 방법으로 찾을것인가?
기존에는 bs.find하고 태그명만 찾겠다면
이번에는 Attribute가들어감
bs.find(name = "div",
attrs = {"id" : "id_spark_quiz"})
이렇게 Key/Value값으로 찾을수 있음
태그명외에 속성으로 태그 탐색
#ID 속성으로 태그 탐색
spQuizTag = bs.find(name = "div",
attrs = {"id":"id_spark_quiz"}
spQuizTag'
type(atag) //bs4.element.ResultSet
태그내 속성 정보를 수집하는 방법
findAttr = findPart.attrs["속성명"]
findAttr = bs.find(name = "태그명")
findPart = findAttr.find(name = "태그명")
이라고 한다면 아마도
bs.find(name = "태그명").find(name = "태그명")
도 될까?
atags = sparkQuizTag.findAll(name = "a")
atags를 인덱스로 접근
linkList = [] // 완벽히 자료형을 리스트로 만들어주기 위해
atagsLen = len(atags)
for i in range(0,atagLen):
linkList.append(atags[i].attrs["href"])
columnList.append(atags[0].attrs["href"])
columnList.append(atags[0].text)
//엄밀히 따지면 행이 여기서 구분된다.
예를들면 X행0열과값과 X행 1열값을 넣어주는 격
rowList = []
ColumnList = []
for i in range(0,atagsLen):
#각 행의 컬럼 정보를 리스트에 저장함
columnList.append(atags[i].attrs["href"])
columnList.append(atags[i].text)
#각 행의 모든 정보를 row
rowList.append(columnList)
#다음행을 담기 위해 컬럼 리스트 초기화
columnList = []
pd.data
pd.DataFrame(zip(linkList,titleList),
columns = ["링크",'타이틀'])
answer = pd.DataFrame(rowList,columns = ["링크","타이틀"])
pd.DataFrame([firstRow,secondRow])
판다스 복습
pip install pandas
1.고성능 데이터 조작 라이브러리
2.스프레드 시트,RDB 데이터 접근
3. 고성능 시계열 처리 기능
4. R의 데이터 프레임과 연계
5. 금융 데이터 분석용 툴 제공
R의
2.
#라이브러리 선언
import pandas as pd
qtyList = [10,15,20,13,22]
qtyDf = pd.DataFrame(qtyList,columns=["qty2"])
qtyDf.columns = ["qty"]
qty를 보면 컬럼 이름이 자동으로 매핑
두개 리스트를 하나의 리스트로 저장해서 바로 출력하는 방법도 있음
yearweekList = [202001,202002,202003]
qtyList = [10,15,20,13,22]
zip(yearweekList,qtyList)
pd.DataFrame(zip(yearweekList,qtyList)
columns = ["yearweek","qty"])
pd.concat이라 해서 좌우로 붙여줄수있음
yearweekList = [202001,202002,202003]
qtyList = [10,15,20,13,22]
두개의 데이터 프라임을 만들어줌
yearweekDf = pd.DataFrame(yearweekList)
qtyDf = pd.DataFrame(qtyList)
두개의 데이터 프라임을 여기에 써줌
pd.concat([yearweekDf,qtydf],axis = 1)
1.Rowlist를 만들어서 넣던가
2.리스트 2개를 Zip을해서 넣던가
3.Concat으로 데이터 프라임을 넣던가 axis추가해서
0으로 하면 밑으로 내려가고 axis를 1로 하면 오른쪽으로 쭉 붙게됨
mergedDf = pd.concat([yearweekDf,qtydf],axis = 1)
mergedDf.columns = ["yearweek","qty"]
oneRow
마지막으로 5번의 방법이 있는데
5. firstRow = [202001,1]
secondRow = [202002,2]
이 방법은 나중에 아래 방법과 비교해볼려고한다.
https://youtu.be/MVjPuVOSVyM?list=PLXjrhm6Px4U-b2hZ9Dvsfxfgb5OPJ1mJ7
RowList를 담는방법이랑
//즉 리스트 안에 리스트가 있는경우 그 안에 리스트는 열의 값을 담게끔 조정하는것 같음
6. 딕셔너리
Diary