Использование session.get () для извлечения контента с веб-страницы - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь очистить списки с Autotrader.com, используя следующий код:

import requests
session = requests.Session()
url = 'https://www.autotrader.com/cars-for-sale/Burlingame+CA-94010?searchRadius=10&zip=94010&marketExtension=include&isNewSearch=true&sortBy=relevance&numRecords=25&firstRecord=0'
homepage = session.get(url)

Похоже, соединение было успешно установлено:

In[115]: homepage
Out[115]: <Response [200]>

Однако доступ к содержимое домашней страницы показывает сообщение об ошибке и ничего похожего на содержимое, доступное через браузер:

In[121]: homepage.content
Out[121]: 
<!DOCTYPE html>

<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Autotrader - page unavailable</title>

(...)

<h1>We're sorry for any inconvenience, but the site is currently unavailable.</h1>

(...)

Я попытался добавить другой пользовательский агент в заголовки, используя user_agent :

headers = {'User-Agent': generate_user_agent()}
homepage = session.get(url, headers=headers)

Но получите тот же результат: page unavailable

Я также попытался указать на сертификат безопасности (root один?), Который я скачал с Chrome:

certificate = './certificate/root.cer'
homepage = session.get(url, headers=headers, verify=certificate)

но я вижу ошибку:

  File "/Users/michaelboles/Applications/anaconda3/lib/python3.7/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
    raise exception_type(errors)

Error: [('x509 certificate routines', 'X509_load_cert_crl_file', 'no certificate or crl found')]

Так что, возможно, я неправильно выполняю эту последнюю часть.

Может ли кто-нибудь предложить какую-либо помощь по восстановлению содержимого веб-страницы Autotrader как это отображается в браузере?

1 Ответ

1 голос
/ 16 января 2020

Я не знаю, что User-Agent генерирует этот user_agent модуль, но когда я запускаю:

import requests

url = 'https://www.autotrader.com/cars-for-sale/Burlingame+CA-94010?searchRadius=10&zip=94010&marketExtension=include&isNewSearch=true&sortBy=relevance&numRecords=25&firstRecord=0'

headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0'} # <-- try this header

print( requests.get(url, headers=headers).text )

Я получаю обычную страницу:

<!DOCTYPE html>
<html>
<head><script>
window.NREUM||(NREUM={}),__nr_require=function(t,n,e){function r(e){if(!n[e]){var o=n[e]={exports:{}};t[e][0].call(o.exports,function(n){var o=t[e][1][n];return r(o||n)},o,o.exports)}return n[e].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<e.length;o++)r(e[o]);return r}({1:[function(t,n,e){function r(t){try{s.console&&console.log(t)}catch(n){}}var o,i=t("ee"),a=t(15),s={};try{o=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(s.console=!0,o.indexOf("dev")!==-1&&(s.dev=!0),o.indexOf("nr_dev")!==-1&&(s.nrDev=!0))}catch(c){}s.nrDev&&i.on("internal-error",func
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...