Chrome의 헤드 없는 인스턴스를 사용하여 웹 페이지 캡처 기능 향상
requests
python으로 웹 캡처 프로그램을 작성한 적이 있는지, 내용상의 차이를 보았는지 여부입니다.브라우저에서 사이트를 열었을 때와 똑같은 결과를 얻지 못할 수도 있다.일부 사이트가
javascript
를 사용하여 클라이언트에게 내용을 보여주거나 사이트가 서버에api 호출을 해서 이 내용을 보여줄 수 있기 때문이다.또한 제목이 부족하기 때문에
requests
라이브러리에서 보낸 요청을 사용하여 낡은 브라우저로 등록할 수 있고 서버가 낡은 브라우저와 호환되는 페이지를 사용하여 응답할 수 있습니다.이 문제는 웹드라이버를 사용하여 쉽게 해결할 수 있습니다.chrome webdriver는 https://chromedriver.chromium.org/에서 다운로드할 수 있습니다.크롬 버전과 일치하는 드라이버를 다운로드하고
chromedriver.exe
python 프로그램을 실행하는 폴더에 넣거나 PATH
에 추가하십시오.일반
requests
의 웹 페이지 캡처 코드는 다음과 같습니다.from bs4 import BeautifulSoup
import requests
res = requests.get(url)
res_soup = BeautifulSoup(res.text, 'html.parser')
print(res_soup.prettify())
for image in res_soup.findAll('img') :
print(image)
for image in res_soup.findAll('img') :
imageSources = image['src']
print(imageSources)
위 코드에서 우리는 GET
에 저장된 URL에 url
요청을 한 다음 BeautifulSoup
를 사용하여 응답 중인 텍스트를 HTML로 해석하고 res_soup
에 저장합니다.그리고 이 응답에서 img
방법으로 findAll()
라는 표시를 찾을 수 있습니다. 이 방법은 주어진 필터가 있는 모든 표시를 되돌려줍니다. (여기는 img
표시입니다.이제 selenium chrome webdriver를 사용합니다. 코드는 다음과 같습니다.
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
html = driver.execute_script("return document.documentElement.outerHTML")
sel_soup = BeautifulSoup(html, 'html.parser')
print(len(sel_soup.findAll('img')))
images = []
for image in sel_soup.findAll('img'):
#print(image)
try:
src = image["src"]
except:
src = image["data-src"]
images.append(src)
우선,selenium에 사용되는 크롬 웹드라이브를 사용하고 있으며, driver = webdriver.Chrome()
를 사용하여 시작합니다.그리고 우리는 .get()
의 driver
방법으로 웹 사이트를 열었다.다음에 우리는 브라우저.execute_script()
방법을 사용하여 브라우저에서 일부javascript를 실행하여 사이트의 html 내용을 추출한다.그런 다음 BeautifulSoup을 사용하여 텍스트를 HTML로 해석하고 findAll
방법으로 모든 이미지 태그를 찾습니다.여기서 주의해야 할 차이점은 클라이언트가 내용을 보여주는 일부 사이트는 HTMldata-src
에 표시된 img
속성으로 해석data-uri
할 수 있는데 그 중에서base64 인코딩된 이미지가 포함될 수 있다는 것이다.주:selenium은
driver
대상에서 단일 태그의 html 내용을 직접 얻는 방법도 제공한다.우리도 이 웹 드라이브를 머리 없는 실례에서 사용할 수 있다. 그러면 창이 나타나지 않고 브라우저가 사용자에게 나타나지 않는다.아래 언급한 몇 줄의 코드를 저희 코드에 추가하면 이 점을 쉽게 실현할 수 있습니다.
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1200")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--ignore-certificate-errors")
우선, 우리는 Options
클래스를 가져옵니다. 이 클래스는 매개 변수망과 옵션을 웹 드라이브에 전달하는 데 사용됩니다.브라우저에 아무것도 표시하지 않기 때문에 시스템 자원을 절약할 수 있습니다.--disable-gpu
파라미터는 여기서 가장 중요한 파라미터이다. 왜냐하면 기본적으로 드라이버에게 헤드 없는 모드로 브라우저를 시작하라고 알려주기 때문이다.지정--headless
파라미터는 기본적으로 머리 없는 모드의 창 크기가 800x600이기 때문에 일부 사이트에 문제가 발생할 수 있습니다.제공--window-size
은 특정 상황에서 확장의 방해를 막기 위한 것이다.어떤 경우, 머리 없는 크롬 웹드라이브의 붕괴를 줄이는 데 도움을 줄 수 있는 --disable-extensions
와 --no-sandbox
가 필요합니다.마지막으로 --disable-dev-shm-usage
크롬이 SSL 인증서의 오류를 무시할 수 있도록 허용합니다.우리도 바뀌어야 돼.
driver = webdriver.Chrome(options=chrome_options)
대상driver = webdriver.Chrome(options=chrome_options)
기사에게 우리를 사용하라고 말해라. --ignore-certificate-errors
참조 파일Selenium Python Docs
BeautifulSoup Docs
나의 구글 사진 네트워크 스크레이퍼는 이곳에서 찾을 수 있다.
무사히드크 / 객소리
beautifulsoup과 요청한 간단한 웹 스크레이퍼 사용하기
객소리
beautifulsoup과 요청한 간단한 웹 스크레이퍼 사용하기
파일 설명:
심플러는 쓰레기야.py: 이것은 간단한 네트워크 스크레이퍼로 요청과beautifulsoup을 사용하여 모든 사이트에서 데이터를 얻습니다.
구글 사진.py: 구글 이미지 네트워크 스크레이퍼가 포함되어 있으며 ChromeWebDriver,Selenium,BeutifulSoup을 사용하여 구글에서 이미지를 얻을 수 있습니다.
Google ImageswithRequests.py: 구글 그림에 사용되는 웹 스크립트는 요청 라이브러리와 뷰티풀 soup을 사용합니다.
구글 사진 샘플.html: 요청 라이브러리를 사용할 때 얻을 수 있는 페이지입니다.
웹드라이브를 사용하면 자바스크립트를 지원하고, 요청 라이브러리를 사용하면 순수한 HTML과 CSS를 얻을 수 있기 때문에 더 많은 그림을 얻을 수 있습니다.
View on GitHub
또한 내 이전 게시물을 볼 수도 있습니다.
Python 및 OpenCV를 사용하여 이미지의 색상 식별
무함마드 무사시드 쿠레시・ 2월 25일・ 4분 읽기
#python
#machinelearning
#webdev
Reference
이 문제에 관하여(Chrome의 헤드 없는 인스턴스를 사용하여 웹 페이지 캡처 기능 향상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mushahidq/better-web-scraping-using-headless-instance-of-chrome-82e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Python 및 OpenCV를 사용하여 이미지의 색상 식별
무함마드 무사시드 쿠레시・ 2월 25일・ 4분 읽기
#python
#machinelearning
#webdev
Reference
이 문제에 관하여(Chrome의 헤드 없는 인스턴스를 사용하여 웹 페이지 캡처 기능 향상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mushahidq/better-web-scraping-using-headless-instance-of-chrome-82e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)