저는 파이썬을 배우고 웹 스크래핑을 시도했습니다. 페이지가 idk가 가치가 떨어졌음에도 불구하고 Google 검색 결과 페이지를 긁어 낼 수있었습니다. Google 이미지 검색도 동일하게 시도되었으며 마찬가지로 감가 상각되었습니다. 브라우저에 나타나는 것과 같지 않습니다.요청한 것과 동일한 페이지가 표시되지 않는 이유는 무엇입니까?
Here 내 코드.
from bs4 import BeautifulSoup
import requests
from PIL import Image
from io import BytesIO
search = input("Search for : ")
params = {"tbm": "isch", "source": "hp", "q": search}
r = requests.get("https://www.google.com/search", params=params)
print("URL :", r.url)
print("Status : ", r.status_code, "\n\n")
f = open("ImageResult.html", "w+")
f.write(r.text)
예를 들어 "Goku"를 검색합니다. Google 이미지에서 this 페이지를 반환합니다.
첫 번째 이미지를 클릭하면 팝업이 열립니다. 또는 Ctrl + 클릭을 누릅니다. 나는 this 페이지에 이른다.
이 페이지에서 "이미지보기"버튼에서 현재 URL 또는 링크를 통해 실제 이미지의 URL에 액세스 할 수 있습니다. 하지만 문제는이 페이지를 요청할 때 얻을 수있는 페이지 버전에서이 페이지/팝업에 연결할 수 없다는 것입니다.
업데이트 : 나는 page을 공유하고 있습니다.
첫 번째 : Google은 일반적으로 요소를 넣기 위해 JavaScript를 사용하는 페이지를 보냅니다. 브라우저가 javaScript를 사용하지 않으면 다른 태그가있는 페이지를 보냅니다. 'requests'는 자바 스크립트를 실행할 수 없으므로 브라우저에있는 태그와 다른 태그를 가져오고 Chrome/Firefox의 DevTool에 표시됩니다. 따라서 브라우저에서 자바 스크립트를 끄고 Google에로드하여'요청 '이 얻을 수있는 것을 확인하십시오. – furas
고맙습니다.'@ furas', 제가 찾고 있던 정확한 답변이었습니다 !! JavaScript를 실행할 수있는'requests'에 대한 대안이 있습니까? 내 필요에 따라 자바 스크립트 사용 가능 출력이 필요하다고 생각합니다. –
[Selenium] (http://selenium-python.readthedocs.io/)을 사용하면 페이지를로드하고 JavaScript를 실행할 브라우저를 제어 할 수 있습니다. "헤드리스"브라우저 (브라우저 창을 디 레이링하지 않음)를 사용할 수도 있습니다. [PhantomJS] (http://phantomjs.org/) 및 [PhantomPy] (https://phantompy.readthedocs.io/en/latest/). [Splash] (https://splash.readthedocs.io/en/stable/)도 참조하십시오. 그러나 JavaScript를 사용하지 않는 Google 페이지에서 작업하려고합니다. 주로 동일한 데이터가 있지만 HTML 태그가 다릅니다. 'Selenium'은 브라우저를 사용해야하므로 느리게 작동합니다. – furas