Met behulp van Python's aiohttp om een ​​web verzoek te doen, krijg ik een browser verouderd fout?

stemmen
0

Ik ben op zoek naar de gebruiken aynscioen aiohttppakketten naar een webpagina aan te vragen. Echter, de webpagina antwoord is:

<p class=warning-title> Please upgrade your web browser. </p>  <br/>
<p class=p-top-30>This browser version is outdated, and may not be fully compatible with our website. Please upgrade to a newer version or use another browser.    </p>

Het maakt eigenlijk niet de pagina ik probeer om toegang te krijgen, maar de homepage in plaats daarvan te laden.

CODE

from fake_useragent import UserAgent
import ssl
from bs4 import BeautifulSoup
import asyncio
import aiohttp

ua = UserAgent()

hdr = {'User-Agent': str(ua.chrome),
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.5',
       'Connection': 'keep-alive'}

ssl_ctx = ssl.create_default_context()
ssl_ctx.check_hostname = False
ssl_ctx.verify_mode = ssl.CERT_NONE

url = '...'

async def parse_website(session):
    async with session.get(url) as response:
        html = await response.text()

    soup = BeautifulSoup(html, 'html.parser')

    print(soup)

async with asyncio.Semaphore(3):
    async with aiohttp.TCPConnector(ssl=ssl_ctx, limit=None) as connector:
        async with aiohttp.ClientSession(connector=connector, headers=hdr) as session:
            for i in range(1):
                await parse_website(session)

Ik heb geprobeerd met uitzondering van de headersstelling in de derde naar de laatste regel async with aiohttp.ClientSession(connector=connector) as session:, maar dan is het antwoord is dat ik niet lang genoeg voor de captcha niet wachten. Dus ik moet het gebruik headersargument te omzeilen de captcha maar ik altijd een krijgen Please upgrade your browserreactie. Ik heb ook geprobeerd toe te voegen cookies={}op dezelfde lijn async with aiohttp.ClientSession(connector=connector, headers=hdr, cookies={}) as session:, maar krijg het zelfde origineel antwoord te zeggen dat de browser is verouderd.

Ik ben ook hier alleen dat één URL-aanvraag. Zodra ik heb deze manier van werken zal ik schalen naar duizenden, dus dat is waarom ik probeer om dit werk met het maken asyncioen aiohttppakketten.

Kan iemand mij vertellen waar ik verkeerd ga?

De vraag is gesteld op 02/12/2019 om 23:51
bron van user
In andere talen...                            


1 antwoorden

Met behulp van Python's aiohttp om een ​​web verzoek te doen, krijg ik een browser verouderd fout?

stemmen
0

Ik ben op zoek naar de gebruiken aynscioen aiohttppakketten naar een webpagina aan te vragen. Echter, de webpagina antwoord is:

<p class="warning-title"> Please upgrade your web browser. </p>  <br/>
<p class="p-top-30">This browser version is outdated, and may not be fully compatible with our website. Please upgrade to a newer version or use another browser.    </p>

Het maakt eigenlijk niet de pagina ik probeer om toegang te krijgen, maar de homepage in plaats daarvan te laden.

CODE

from fake_useragent import UserAgent
import ssl
from bs4 import BeautifulSoup
import asyncio
import aiohttp

ua = UserAgent()

hdr = {'User-Agent': str(ua.chrome),
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.5',
       'Connection': 'keep-alive'}

ssl_ctx = ssl.create_default_context()
ssl_ctx.check_hostname = False
ssl_ctx.verify_mode = ssl.CERT_NONE

url = '...'

async def parse_website(session):
    async with session.get(url) as response:
        html = await response.text()

    soup = BeautifulSoup(html, 'html.parser')

    print(soup)

async with asyncio.Semaphore(3):
    async with aiohttp.TCPConnector(ssl=ssl_ctx, limit=None) as connector:
        async with aiohttp.ClientSession(connector=connector, headers=hdr) as session:
            for i in range(1):
                await parse_website(session)

Ik heb geprobeerd met uitzondering van de headersstelling in de derde naar de laatste regel async with aiohttp.ClientSession(connector=connector) as session:, maar dan is het antwoord is dat ik niet lang genoeg voor de captcha niet wachten. Dus ik moet het gebruik headersargument te omzeilen de captcha maar ik altijd een krijgen Please upgrade your browserreactie. Ik heb ook geprobeerd toe te voegen cookies={}op dezelfde lijn async with aiohttp.ClientSession(connector=connector, headers=hdr, cookies={}) as session:, maar krijg het zelfde origineel antwoord te zeggen dat de browser is verouderd.

Ik ben ook hier alleen dat één URL-aanvraag. Zodra ik heb deze manier van werken zal ik schalen naar duizenden, dus dat is waarom ik probeer om dit werk met het maken asyncioen aiohttppakketten.

Kan iemand mij vertellen waar ik verkeerd ga?

antwoordde op 02/12/2019 om 23:51
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more