Chrome의 헤드 없는 인스턴스를 사용하여 웹 페이지 캡처 기능 향상

10756 단어 pythontutorial
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
또한 내 이전 게시물을 볼 수도 있습니다.

좋은 웹페이지 즐겨찾기