#javascript #python #web #request #screen-scraping
Вопрос:
Код
import requests
from bs4 import BeautifulSoup as bs
my_url='https://www.olx.com.pk/item/oppo-f17-pro8128-iid-1034320813'
with requests.session() as s:
r=s.get(my_url)
page_html=bs(r.content,'html.parser')
safe=page_html.findAll('script')
print("The Length if Script is {0}:".format(len(safe)))
for i in safe:
if " 92" in str(i):
print(i)
Запрос
Я хочу получить этот номер телефона, который на самом деле присутствует в windows.state, используя скрипт python, но я не знаю, как проанализировать window.state.Буду очень благодарен, если вы поможете мне решить эту проблему. заранее спасибо!
Комментарии:
1. Нет, сэр. Это совсем другое дело. то, что у меня сейчас есть, — это текст сценария, когда вы запускаете тот код, который я создал. Теперь я хочу, чтобы в этом скрипте было поле, содержащее номер телефона. Мне нужен этот номер телефона.
2. Мне просто нужен скрипт на python, который позволит мне очистить номер телефона, отображаемый на изображении, показанном вам. Либо вы можете изменить мой, либо, если вы сможете сделать это лучше, я буду вам очень благодарен
3. Вы можете выбрать седьмой
script
тег из кода и извлечь нужные вам данные.4. На самом деле возникли проблемы с анализом этого телефона по этому сценарию. Это реальная проблема, с которой я сталкиваюсь. Не удается разобрать этот номер телефона
5. Я думал о преобразовании этого текста внутри
script
в json и извлечении номера телефона, но он не в формате json. Я думаю, вам нужно выполнить поиск по строкам и извлечь номер телефона.
Ответ №1:
Как я уже упоминал в комментариях, window.state
он присутствует внутри 7 <script>
-го тега.
Я извлек содержимое тега скрипта и выполнил поиск по строке phoneNumber
, нашел его индекс и смог получить необходимые вам данные.
Извлечение данных из JSON было бы проще, но данные не в формате JSON.
import bs4 as bs
import requests
url = 'https://www.olx.com.pk/item/oppo-f17-pro8128-iid-1034320813'
resp = requests.get(url)
# Convert the response text to HTML soup object
soup = bs.BeautifulSoup(resp.text, 'html.parser')
# Select the 7th script tag (that is where the data you need is present)
s = soup.findAll('script')[6]
# Extract the contents of script. This will be a string type.
f = s.contents[0]
# Find the index of substring "phoneNumber" - the data that you need.
idx = f.index('phoneNumber')
# Since you need the phone number, use string slicing and extract the data.
print(f[idx-1: idx 28])
# Output
"phoneNumber":" 923077250739"
Комментарии:
1. Не хотели бы вы дать некоторые пояснения к этому коду? если возможно, от строки № 7 до конца.
2. @АЛИ, я обновил свой ответ. Пожалуйста, проверьте для получения объяснения.
3. идеальный Ответ. Спасибо
Ответ №2:
Я бы, вероятно, просто использовал простое регулярное выражение для таргетирования строки в «» следующем номере телефона
import requests, re
r = requests.get('https://www.olx.com.pk/item/oppo-f17-pro8128-iid-1034320813')
print(re.search(r'phoneNumber":"(.*?)"', r.text).group(1))