파이썬 요청을 사용하여 브라우저 방문을 위장하고 사용자 에이전트를 생성하는 방법은 무엇입니까?
저는 이 웹사이트에서 내용을 얻고 싶습니다.
파이어폭스나 크롬 같은 브라우저를 사용하면 원하는 실제 웹사이트 페이지를 얻을 수 있지만, 파이썬 요청 패키지를 사용하면 (또는)wget
command)를 사용하면 완전히 다른 HTML 페이지가 반환됩니다.
저는 웹사이트 개발자가 이것을 위해 블록을 몇 개 만들었다고 생각했습니다.
질문.
파이썬 요청 또는 명령 wget을 사용하여 브라우저 방문을 위장하려면 어떻게 해야 합니까?
머리글 입력:
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)
참고로, 다음은 다양한 브라우저에 대한 사용자 에이전트 문자열 목록입니다.
참고로, 가짜 사용자 에이전트라는 매우 유용한 타사 패키지가 있으며, 이 패키지는 사용자 에이전트 위에 훌륭한 추상화 계층을 제공합니다.
가짜 사용자 대리인
실제 데이터베이스를 사용하는 간단한 최신 사용자 에이전트 페이커
데모:
>>> 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'
사용 방법:
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]>
파이어폭스를 가짜 사용자 에이전트로 사용하여 이 작업을 시도해 보십시오(게다가 쿠키를 사용하여 웹 스크래핑을 할 수 있는 좋은 시작 스크립트입니다).
#!/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"
답의 근본은 질문을 하는 사람이 원하는 것을 얻기 위해서는 자바스크립트 통역사가 필요하다는 것입니다.제가 발견한 것은 자바스크립트로 해석되기 전에 json의 웹사이트에서 제가 원하는 모든 정보를 얻을 수 있다는 것입니다.이것은 각 웹 페이지가 동일한 형식이기를 바라며 HTML을 구문 분석하는 데 많은 시간을 절약했습니다.
따라서 요청을 사용하는 웹 사이트에서 응답을 받으면 바닥글에 있는 Javascript JSON을 구문 분석할 준비가 되어 있는 것을 발견할 수 있으므로 html/text를 실제로 살펴봅니다.
pyuser_agent를 사용합니다.이 패키지는 사용자 Agnet 가져오기를 사용합니다.
import pyuser_agent
import requests
ua = pyuser_agent.UA()
headers = {
"User-Agent" : ua.random
}
print(headers)
uri = "https://github.com/THAVASIGTI/"
res = requests.request("GET",uri,headers=headers)
print(res)
을 위로하다
{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN) AppleWebKit/533+ (KHTML, like Gecko)'}
<Response [200]>
정답.
클라이언트와 서버 간의 통신을 위해 올바른 형식의 사용자 에이전트 문자열을 사용하여 헤더를 작성해야 합니다.
자신의 사용자 에이전트를 여기에서 확인할 수 있습니다.
예
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0
타사 패키지 user_agent 0.1.9
이 모듈은 매우 사용하기 쉬우며 코드 한 줄에서 사용자 에이전트 문자열을 무작위로 생성합니다.
from user_agent import generate_user_agent, generate_navigator
from pprint import pprint
print(generate_user_agent())
# 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.3; Win64; x64)'
print(generate_user_agent(os=('mac', 'linux')))
# 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:36.0) Gecko/20100101 Firefox/36.0'
pprint(generate_navigator())
# {'app_code_name': 'Mozilla',
# 'app_name': 'Netscape',
# 'appversion': '5.0',
# 'name': 'firefox',
# 'os': 'linux',
# 'oscpu': 'Linux i686 on x86_64',
# 'platform': 'Linux i686 on x86_64',
# 'user_agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64; rv:41.0) Gecko/20100101 Firefox/41.0',
# 'version': '41.0'}
pprint(generate_navigator_js())
# {'appCodeName': 'Mozilla',
# 'appName': 'Netscape',
# 'appVersion': '38.0',
# 'platform': 'MacIntel',
# 'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0'}
사용자 에이전트는 괜찮지만 JavaScript 사이트를 가져오려고 합니다.우리는 셀레늄을 사용할 수 있지만 설정과 유지보수가 번거롭기 때문에 자바스크립트 렌더링된 페이지를 가져오는 가장 좋은 방법은 requests_html 모듈입니다.잘 알려진 요청 모듈의 상위 집합입니다.설치하려면 pip을 사용합니다.
pip install requests-html
그리고 JavaScript 렌더링된 페이지를 가져오려면 다음을 사용합니다.
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')
도움이 되길 바랍니다.그것은 자바스크립트를 렌더링하기 위해 꼭두각시를 사용하고 크롬을 다운로드하지만 모든 것이 후드 아래에서 일어나고 있다고 걱정할 필요는 없습니다.당신은 최종 결과를 얻을 것입니다.
비슷한 문제가 있었지만 사용할 수 없었습니다.UserAgent
의 내부 fake_useragent
. 안에서 . 커컨도안코실있행고다니었습.
import requests
import ujson
import random
response = requests.get('https://fake-useragent.herokuapp.com/browsers/0.1.11')
agents_dictionary = ujson.loads(response.text)
random_browser_number = str(random.randint(0, len(agents_dictionary['randomize'])))
random_browser = agents_dictionary['randomize'][random_browser_number]
user_agents_list = agents_dictionary['browsers'][random_browser]
user_agent = user_agents_list[random.randint(0, len(user_agents_list)-1)]
저는 모듈에 사용된 엔드포인트를 목표로 했습니다.이 솔루션은 여전히 랜덤 사용자 에이전트를 제공했지만 엔드포인트의 데이터 구조가 변경될 가능성이 있습니다.
이렇게 해서, 저는 거의 1000명의 가짜 사용자 에이전트 목록에서 무작위 사용자 에이전트를 사용해 왔습니다.
from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
software_names = [SoftwareName.ANDROID.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value, OperatingSystem.MAC.value]
user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=1000)
# Get list of user agents.
user_agents = user_agent_rotator.get_user_agents()
user_agent_random = user_agent_rotator.get_random_user_agent()
예
print(user_agent_random)
Mozilla/5.0(Windows NT 10.0, Win64, x64) Apple WebKit/537.36(KHTML, Gecko와 유사) Chrome/87.0.4280.88 Safari/537.36
자세한 내용은 이 링크를 참조하십시오.
언급URL : https://stackoverflow.com/questions/27652543/how-to-use-python-requests-to-fake-a-browser-visit-a-k-a-and-generate-user-agent
'programing' 카테고리의 다른 글
Oracle이 이 쿼리에 대해 "ORA-00918: column undiously defined"를 제기하지 않는 이유는 무엇입니까? (0) | 2023.07.19 |
---|---|
장고 - 파일을 만들고 모델의 파일 필드에 저장하는 방법은 무엇입니까? (0) | 2023.07.19 |
스프링 부트 : 요청 매개 변수의 사용자 지정 유효성 검사 (0) | 2023.07.19 |
Pandas 막대 그림에 값을 사용하여 막대 주석 달기 (0) | 2023.07.19 |
pip 캐시 폴더는 어디에 있습니까? (0) | 2023.07.19 |