선택자의 tag만으로 선택하기어려울때가있다.
class이름은 없고 같은 상위 컨테이너에 같은 태그로 있을때, 순서를 이용해서 타겟팅을 해주어야한다.
(공통적으로 selector를 이용함)
in 선택자 | in 리스트 |
error(없는 값에 .text -> error) | error(out of border ex:list[3]) |
Data 1개 -> if문 string 사용가능 | Data가 나눠짐 |
nth-of-type(1,2,3,4...) | list[0,1,2,3,4...] |
nth-child는 단독으로 쓰이는게 의미가 있는듯 li:nth-child 해도 nth-child가 우선시됨
nth-of-type - 주의사항
1. 무조껀 ">"을 써줘야한다.
2. class , id 와 함께쓰이면 안된다.
if-> 비교연산자들 / continue break / in list , in "string"
지극히 개인적인 부분
select_one("p").text (o) ///// select_one("p span").text (x) 선택은 하나만되
나머지는 누락/ find_all 같은느낌이 아니야
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡstage3.stage4ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
조금 더 다양한 데이터를 얻기 위함
1. 속성값
2. 이중 requests
3. 데이터를 원하는 파일형식으로 저장
1. url= title.attrs["href"]속성값 가져오기
- 속성값을 문자열로 받기때문에 .text 써주면 error남
2. for문안에 한번 더 requests
- 이중 requests에서는 굳이 다시 container를 잡을 필요가없는것이 대부분의 경우가 중복값이 없기때문에 그 페이지 자체가 컨테이너가 되는 경우가 많다.
3. from urllib.request import urlretrieve
urltretrieve(img.attrs['src'], Directory/파일명.확장자)
- Data에 맞는 확장자가 있음(저장할 때 잘 해야겠지?/오히려 속일 수가 있어)
- 컴퓨터 환경이나 방화벽들의 문제들로 urllib에서 urlretrieve가 안되는경우 :
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
자작문제/
네이버쇼핑 top100 물품에 대해 최저가top3 쇼핑몰을 crawling 할때, 중간에 가다가 에러가 나는 경우가 있어서 질문을 올렸었다.
- def에서 return이 작동하는 원리
try,except 구문을 두번 사용한 함수 trycatch
code는 위에서 아래로 읽기 때문에, 첫번째 try except에서 둘 중 무엇이 되었간에 밑에 있는 try and except에 씌여진 return값으로 반환될꺼라고 생각했었다. 하지만 실제로는 예상했던 코드의 동작방법과는 다르게 작동하였다.
그 이유를 알고자 두가지 경우로 실험해보았다.
1. try except를 함수 적용
2. try except를 함수없이 적용
두 값이 다르게 나왔다.
오른쪽사진의 왼쪽 소스코드가 함수로 tryandExcept를 해본것이고, 오른쪽 소스코드가 함수없이 사용해본 것이다.
함수로 썼을때는 '1' 이 출력됬고, 함수를 쓰지않았을 때는 '2ddd'가 출력됬다.
둘의 차이는 return 때문이다. return은 반환과 동시에 함수를 끝내는 것으로 보인다. for문의 break 기능을 return에서 가지고 있는 것으로 예측된다. (실제로도 맞다 12/29)
try를 하고, 또 다시 다른 try를 해보는 식의 다중 try를 if문의 elif 같은 형태로 만들고 싶다는 질문에 대한 답변:
코알라에 나온 질문
1. https://coalastudy.com/feed/2411
"nth-of-type 을 자손으로 했을 때 어떻게 선택되어질까?" 에 대한 설명.
설명에 의하면, 자손에 해당하는 div까지 모두 수집한 후에 nth-of-type을 적용한다고하는데 나는 다르게 생각한다.
director를 for문 돌렸을 때 다른 것이 출력되는 것이 아니 추가적으로 출력된 것을 보면
div:nth-of-type(2)에 해당하는 모든 녀석을 자손으로 찾으니깐 여러값이 뜨는 것으로 보인다. 이는 html inspection에서 ctrl+F 로하여 검색한 결과와 일치한다.
2.https://coalastudy.com/feed/2436 내용은 모두 이해했음. 해결방안도 앎
그냥 자연스럽게 한 것이라, 알 수 있었던 이유를 되짚어보니 https://steniipion.tistory.com/11 3주차에 있었던 Camila 와 Shawn의 Senorita에서 select_one 선택되어 .text를 하면 그 안의 태그 속 Data까지 모두 끌어와진다는 것을 알고 있었기때문이다.
코드를 해석해보면서 느낀 점
- try: 1) 2) 3) vs try: 1) try: 2)
- javascript의 join : var element = element.join() <--------> python의 join : element = ",".join(element)
- .text 는 값이 없거나, list이거나 , 이미 .text를 적용했거나 다 error가 뜬다.
- print("안녕하세요"+html태그) ->(x) :print안에는 모두 같은 형식이여야함
'코알라UNIV' 카테고리의 다른 글
~중간점검~ (0) | 2019.11.13 |
---|---|
6주차 내 마음대로 움직이는 로봇 브라우저 (0) | 2019.11.13 |
4주차 데이터를 저장하는 방법 (0) | 2019.11.01 |
3주차 파이썬으로 데이터 수집하기 (0) | 2019.10.17 |
2주차 데이터수집을 위한 기초 파이썬 (0) | 2019.10.09 |