Python 요청을 사용하여 브라우저 방문을 가짜로 만드는 방법은 무엇입니까?


127

아래 웹 사이트에서 콘텐츠를 얻고 싶습니다. Firefox 또는 Chrome과 같은 브라우저를 사용하면 원하는 실제 웹 사이트 페이지를 얻을 수 있지만 Python 요청 패키지 (또는 wget명령)를 사용하여 가져 오면 완전히 다른 HTML 페이지가 반환됩니다. 나는 웹 사이트 개발자가 이것을 위해 몇 가지 블록을 만들었다 고 생각했기 때문에 질문은 다음과 같습니다.

파이썬 요청 또는 wget 명령을 사용하여 브라우저 방문을 가짜로 만들려면 어떻게합니까?

http://www.ichangtou.com/#company:data_000008.html

답변:


282

User-Agent헤더 제공 :

import requests

url = 'http://www.ichangtou.com/#company:data_000008.html'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

response = requests.get(url, headers=headers)
print(response.content)

참고로 다음은 다양한 브라우저에 대한 User-Agent 문자열 목록입니다.


참고로 사용자 에이전트에 대한 멋진 추상화 계층을 제공하는 fake-useragent 라는 매우 유용한 타사 패키지가 있습니다 .

가짜 사용자 에이전트

실제 데이터베이스와 함께 최신 간단한 사용자 에이전트 가짜

데모:

>>> from fake_useragent import UserAgent
>>> ua = UserAgent()
>>> ua.chrome
u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'
>>> ua.random
u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'

1
귀하의 답변에 감사드립니다. 요청의 헤더로 시도했지만 여전히 페이지의 실제 콘텐츠를 가져올 수 없습니다. '이 응용 프로그램을 올바르게 표시하려면 웹 브라우저에 JavaScript가 활성화되어 있어야합니다.'라는 문자열이 있습니다. 반환 된 html 페이지에서 요청에 자바 스크립트 지원을 추가해야합니까? 그렇다면 어떻게해야합니까?
user1726366

8
@ user1726366 : 단순히 JavaScript 지원을 추가 할 수는 없습니다.이를 위해서는 JavaScript 인터프리터가 필요합니다. 가장 간단한 방법은 실제 웹 브라우저의 JavaScript 인터프리터를 사용하는 것이지만 Selenium을 사용하여 Python에서이를 자동화 할 수 있습니다 .
PM 2Ring

1
@ alecxe, @ sputnick : 파이썬 요청과 브라우저를 사용하는 것과의 차이점을 비교하기 위해 wireshark로 패킷을 캡처하려고했는데, 웹 사이트 URL이 정적 URL이 아닌 것 같습니다. 페이지 렌더링이 완료 될 때까지 기다려야하므로 Selenium 소리가납니다. 나에게 맞는 도구. 당신의 친절한 도움에 감사드립니다. :)
user1726366

4
@ user1726366 yup, 실제 브라우저 + 셀레늄을 사용하는 것이 귀하의 요구에 맞는다면 이것이 가장 고통스러운 접근 방식입니다. PhantomJS셀레늄과 함께 헤드리스 브라우저를 사용할 수 있습니다 . 감사. (이 도움이 있다면 답을 동의하는 것을 잊지 마세요)
alecxe

일부 검색 엔진이 일부 UserAgent. 아무도 이유를 알고 있습니까? 누구든지 수용 가능한 목록을 제공 할 수 UserAgent있습니까?
dallonsi

30

이 질문이 여전히 유효하다면

가짜 UserAgent를 사용했습니다.

사용하는 방법:

from fake_useragent import UserAgent
import requests


ua = UserAgent()
print(ua.chrome)
header = {'User-Agent':str(ua.chrome)}
print(header)
url = "https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
htmlContent = requests.get(url, headers=header)
print(htmlContent)

산출:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
{'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
<Response [200]>

여전히 오류 404가 발생합니다
Maksim Kniazev

1
404는 다른 오류입니다. 브라우저를 사용하여 페이지를 탐색 할 수 있습니까?
Umesh Kaushik

물론. 사용하려는 웹 사이트가 모든 Amazon EC2 IP를 차단 한 것 같습니다.
Maksim Kniazev

여기 링크를 핑해 주시겠습니까? 내 끝에서 시도 할 수 있습니다. 또한 IP가 차단 된 경우 오류 코드는 403 (금지) 또는 401 (승인되지 않음)이어야합니다. 스크래핑을 전혀 허용하지 않는 웹 사이트가 있습니다. 더 많은 웹 사이트 사용자 cloudflare는 웹 사이트에 액세스하는 봇을 피합니다.
Umesh Kaushik

여기 내 링크 regalbloodline.com/music/eminem 입니다. 전에는 잘 작동했습니다. python 2에서 작업을 중지했습니다. 로컬 컴퓨터에서 python 3에서 작업했습니다. AWS EC2로 이동은 작동하지 않았습니다. 오류 404가 계속 발생했습니다. 그런 다음 로컬 컴퓨터에서도 작동을 중지했습니다. 브라우저 에뮬레이션을 사용하면 로컬 컴퓨터에서는 작동하지만 EC2에서는 작동하지 않습니다. 결국 나는 포기하고 긁을 수있는 대체 웹 사이트를 찾았다. 그건 그렇고, cloudfire는 피할 수 있습니까?
Maksim Kniazev

7

파이어 폭스를 가짜 사용자 에이전트 로 사용하여이 작업을 시도해보십시오 (또한 쿠키를 사용하는 웹 스크래핑을위한 좋은 시작 스크립트입니다).

#!/usr/bin/env python2
# -*- coding: utf8 -*-
# vim:ts=4:sw=4


import cookielib, urllib2, sys

def doIt(uri):
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    page = opener.open(uri)
    page.addheaders = [('User-agent', 'Mozilla/5.0')]
    print page.read()

for i in sys.argv[1:]:
    doIt(i)

용법:

python script.py "http://www.ichangtou.com/#company:data_000008.html"

3

대답의 근원은 질문을하는 사람이 원하는 것을 얻으려면 JavaScript 인터프리터가 필요하다는 것입니다. 내가 찾은 것은 JavaScript로 해석되기 전에 json의 웹 사이트에서 원하는 모든 정보를 얻을 수 있다는 것입니다. 이것은 각 웹 페이지가 동일한 형식이기를 바라면서 html을 파싱하는 데 많은 시간을 절약했습니다.

따라서 요청을 사용하여 웹 사이트에서 응답을 받으면 실제로 html / text를 살펴보십시오. 바닥 글에서 파싱 할 준비가 된 자바 스크립트 JSON을 찾을 수 있기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.