제가 스크랩하려는 소스는이것DOI(Document Object Identifier) 리디렉션을 활용하는 연구 기사용 웹사이트:
doi=10.1006/jfin.1996.0208
url=$(curl -L -s -w %{url_effective} "http://dx.doi.org/"$doi -o /dev/null)
curl -L --referer ";auto" $url > test.htm --dump-header /dev/null
그러나 파일/소스는 브라우저에서 링크를 열 때 보이는 것과 다르게 보입니다. 예를 들어 참조 목록은 20개 항목으로 제한되어 있으며 항목에 대한 링크를 표시하는 대신 "로드 중"만 표시됩니다.
분명히 소스는 브라우저(FF)에 표시되는 것과 다릅니다. 실제로 웹사이트의 소스 파일을 보면이것생성된 소스 코드를 북마크에 추가하면 원하는 전체 소스 파일을 얻을 수 있습니다.
웹페이지에서 생성된 소스 코드를 가져올 수 있는 방법이 있나요? 보세요이것자세한 매뉴얼은 소스 생성과 관련된 내용을 찾을 수 없습니다.
답변1
Curl은 "메인" 페이지만 처리합니다. 페이지에 JavaScript에 의해 로드된 콘텐츠가 있는 경우 curl
.
"완전한" 페이지를 얻기 위해 제가 찾은 가장 좋은 방법은 다음을 사용하는 것입니다.셀렌그리고 일부 스크립트에서 구동합니다(저는 Python을 사용하여 이 작업을 수행합니다). 보장이 없기 때문에 완전성은 상대적입니다.한 번JavaScript 로드가 완료되었습니다.
예를 들어 Python virtualenv에서 다음을 실행합니다.
pip install selenium
python dl.py http://unix.stackexchange.com/q/210268/33055 /var/tmp/page.html 5
그리고 dl.py
:
import sys
import time
from selenium import webdriver
url, file_name, seconds = sys.argv[1:4]
browser = webdriver.Firefox()
try:
browser.get(url)
time.sleep(int(seconds))
with open(file_name, 'w') as fp:
fp.write(browser.find_element_by_xpath('html').get_attribute(
"outerHTML").encode('utf-8'))
finally:
browser.close()