Проблема с получением телефонного номера с помощью запросов

#python #python-3.x #web-scraping

#python #python-3.x #очистка веб-страниц

Вопрос:

Я создал скрипт на python для получения номера телефона, связанного со ссылкой javascript, видимой как Phone Us с веб-страницы. Я знаю, что могу использовать selenium, чтобы нажать на эту ссылку и подождать, пока номер не станет видимым, чтобы проанализировать это, но мне не интересно идти этим путем.

Главная ссылка

введите описание изображения здесь

Однако, когда я вручную нажимаю на эту ссылку после открытия chrome dev tools, чтобы увидеть сетевую активность на вкладке xhr, я смог найти эту ссылку https://www.cv-library.co.uk/account-contact-details?id=192205 вместе со следующими заголовками, которые выдают некоторый json-ответ, содержащий номер телефона, который мне нужен.

Заголовки взяты из chrome dev tools:

 :authority: www.cv-library.co.uk
:method: GET
:path: /account-contact-details?id=192205
:scheme: https
accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,bn;q=0.8
cookie: job_search_bar_variant=variant_C_labels_above; _ga=GA1.3.807796815.1553681717; _gid=GA1.3.728310157.1553681717; _gcl_au=1.1.1379982900.1553681717; _fbp=fb.2.1553681722126.942064476; tempbasket=1553681845451186016; ui_hidecookienotice=1; session=1553697454.46289:BQkDAAAAAA==:375400f1f62664342b2c0bd1e6bcd9c89170768b; _gat_UA-23741307-1=1
referer: https://www.cv-library.co.uk/list-jobs/276692/Allen-York-Built-and-Natural-Environment-Ltd
user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
x-requested-with: XMLHttpRequest
  

Общий раздел выглядит следующим образом:

 Request URL: https://www.cv-library.co.uk/account-contact-details?id=192205
Request Method: GET
Status Code: 200 
Remote Address: 109.169.5.15:443
Referrer Policy: no-referrer-when-downgrade
  

Ответ, который он выдает в браузере:

 {email: "", telephone: "01202 888986"}
  

Я пробовал это:

 import requests

url = "https://www.cv-library.co.uk/account-contact-details?id=192205"

headers = {
    'referer': 'https://www.cv-library.co.uk/list-jobs/276692/Allen-York-Built-and-Natural-Environment-Ltd',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}

with requests.Session() as s:
    res = s.get(url,headers=headers).json()
    print(res)
  

Ошибка, которую он выдает:

 raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 7 column 1 (char 6)
  

Как я могу получить этот номер телефона с помощью запросов?

Комментарии:

1. используйте res.content вместо json, это может быть не то, что вы ожидаете

2. Тогда что бы это было @E.Serra? Я не смог найти ни одного номера телефона в res.content.

3. это определенно не json, который вы говорите ему ожидать

4. Я даже не получаю действительного ответа. Я получаю 404

5. Рассмотрим этот подход как заполнитель @E.Serra. Спасибо.

Ответ №1:

Попробуйте добавить 'x-requested-with':'XMLHttpRequest' в свои заголовки:

 import requests

url = "https://www.cv-library.co.uk/account-contact-details"

headers = {
    'x-requested-with': 'XMLHttpRequest',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

payload = {'id':'192205'}

with requests.Session() as s:
    res = s.get(url,headers=headers, params=payload).json()
    print(res)
  

Вывод:

 print (res['telephone'])
01202 888986
  

Комментарии:

1. Гррр! только заголовок, с которым я не пробовал. Я хотел бы миллион раз поддержать ваше решение @chitown88!!!