Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- XML읽기
- get/post
- 클래스
- 웹스크래핑
- pandas
- CSS적용방식
- DB연동
- CRUD 게시판
- SQL
- 귀무/대립가설
- 간단한채팅프로그램
- 클로저(closure)
- AJAX
- eclipse #python
- GAC 자격증
- python 모듈 설치
- Python
- 멀티프로세싱
- HTML
- 폴더구조변경
- 통계
- 서류합격팁
- 투표알고리즘
- 나이브베이지안분류
- javascript
- VSCode
- Process
- Thread
- CSS
- 리스트컴프리헨션
Archives
- Today
- Total
EASY PEASY CODING
[파이썬] 웹 스크래핑 본문
멀티 프로세싱을 이용한 웹스크래핑
requests와 BeautifulSoup을 사용하여 웹 페이지를 가져오고 파싱
pip install requests beautifulsoup4
코드예시
import requests
from bs4 import BeautifulSoup as bs
import time
from multiprocessing import Pool
# 스크래핑 대상 컨텐츠: https://beomi.github.io/beomi.github.io_old/
# 하이퍼 링크 읽어오기
def get_links():
data = requests.get("https://beomi.github.io/beomi.github.io_old/").text
soup = bs(data, 'html.parser')
print(type(soup)) # <class 'bs4.BeautifulSoup'>
my_titles = soup.select('h3 > a')
data = []
for title in my_titles:
data.append(title.get('href'))
return data
def get_content(link):
abs_link = "https://beomi.github.io" + link # full url 완성
# print(abs_link)
data = requests.get(abs_link).text
print(data)
# soup=bs(data,'html.parser')
# print(soup.select('h1')[0].text)
if __name__ == '__main__':
# print(get_links())
# print(len(get_links()))
start_time = time.time()
'''직렬처리
for link in get_links():
get_content(link)
'''
# 병렬처리, 프로세스 네개를 사용하고 있습니다, 자원은 더 사용하지만 속도는 더 빨라짐
pool = Pool(processes=4)
pool.map(get_content, get_links())
print("---%s 초---" % (time.time() - start_time))
# Pool을 사용하여 병렬 처리 완료
추가 설명
- get_links(): 웹 페이지에서 하이퍼링크를 읽어오는 함수입니다. requests 라이브러리를 사용하여 웹 페이지를 가져와 BeautifulSoup을 이용해 파싱합니다. 그 후, 선택자를 사용해 원하는 링크를 추출합니다.
- get_content(link): 링크를 받아 해당 페이지의 내용을 가져오는 함수입니다. 전체 URL을 완성시킨 후, requests를 사용해 해당 페이지를 가져옵니다.
- if __name__ == '__main__':: 메인 모듈에서 실행되도록 하는 블록입니다. Windows에서 multiprocessing 모듈을 사용할 때 필요합니다.
각각에 대한 처리 시간 비교
직렬: ---26.34516739845276 초---
병렬: ---13.443757057189941 초---