파파비의 블로그
[python/파이썬] 여러 페이지를 한번에 크롤링하기 본문
일단 필요한 개념부터 정리하면
Query
웹서버에 get 요청을 보낼 때, 조건에 맞는 정보를 위한 변수
자세한 내용은
https://velog.io/@pear/Query-String-%EC%BF%BC%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A7%81%EC%9D%B4%EB%9E%80
여기가 설명이 잘 되어 있다
requests에 get request를 보낼 때, params 매개변수로 딕셔너리 형태의 key-value pair를 넣음으로써 쿼리를 지정할 수 있다.
url = "https://www.google.com/search"
result = requests.get(url, params = {"q" : "python"})
구글에 python을 검색하면 url이
https://www.google.com/search?q=python 이렇게 찍히는데, 위 표현은 해당 url을 의미한다.
HTML의 tag/attributes
html에는 여러 종류의 tag와 속성이 있습니다.
<div class="cls", id="123"></div>
div - 태그
class, is = 속성
어떤 속성들이 있는지는 .attrs 라는 키워드를 사용
soup.find("div").attrs
속성 값에 접근하려면, 딕셔너리 형태의 방식으로 접근
div = soup.find("div")
div['class']
#class의 속성 값이 도출됨
하이퍼링크를 걸어주는 <a> 태그에, hrerf 의 값은 url을 나타내는데,
soup.find("a")['href'] ## url이 나오게 됨
이렇게 해당 url 값에 접근할수 있음
Children, Name
Children : 어떤 태그가 포함하고 있는 태그,
Name : 태그의 이름을 나타냄
<div>
<span>span 1</span>
<span>span 2</span>
<p>p tag</p>
<img ...>
</div>
div라는 태그 안에, 4개의 childern 이 있는 것
각 children의 속성이름은 span, p img
children = soup.find("div").children
#span, p, img 태그를 갖는 리스트를 도출
for child in children:
print(child.name)
#span, span, p, img 를 출력함
이제 제대로 크롤링을 해보자
스포츠동아의 연예 부분에 1-5페이지까지의 기사 제목들을 크롤링해본다고 하자
해당 페이지들은
https://sports.donga.com/ent?p=1
https://sports.donga.com/ent?p=21
https://sports.donga.com/ent?p=41 ...
이런 규칙으로 페이지가 1->2로 하나씩 늘어날 때 마다
쿼리 부분의 p의 값이 20씩 커지는 규칙을 갖고 있다.
해당 url들을, string + string형태를 통해 만들수도 있지만
request의 get 메소드 사용시 params 매개변수를 통해서도 할 수 있다.
url = "https://sports.donga.com/ent"
for i in range(0, 5):
req = requests.get(url, params = {'p' : 1+20*i})
soup = BeautifulSoup(req.text, "html.parser")
이렇게도 가능하다
'개발 > python' 카테고리의 다른 글
[python/파이썬] 워드클라우드 만들기 (영어 & 한글) (0) | 2021.06.16 |
---|---|
[python/파이썬] API를 활용한 크롤링 (0) | 2021.06.15 |
[python/파이썬] 크롤링 기초 (BeautifulSoup & Requests 라이브러리) (0) | 2021.06.13 |
[python/파이썬] 함수 코딩시 Tips (0) | 2021.06.11 |
[파이썬, Python] 임의 정밀도, int (0) | 2021.05.17 |