не удается обнаружить JSON из источника страницы после открытия из селена

Исходя из наивысшего разрешенного ответа, я немного изменил регулярное выражение /^[+\-]?(?=.)(?:0|[1-9]\d*)?(?:\.\d*)?(?:\d[eE][+\-]?\d+)?$/.

Преимущества, которые это дает:

  1. позволяют сопоставлять числа, такие как .9 (я сделал опцию (?:0|[1-9]\d*) опционально с ?)
  2. предотвращает совмещение только оператора в начале и предотвращает совпадение строк нулевой длины (использует lookahead, (?=.))
  3. предотвращает совпадение e9, потому что перед научной записью

требуется \d. Моя цель в том, чтобы использовать его для захвата значимых цифр и выполнения значительной математики. Поэтому я также собираюсь нарезать его такими группами: /^[+\-]?(?=.)(0|[1-9]\d*)?(\.\d*)?(?:(\d)[eE][+\-]?\d+)?$/.

Объяснение того, как получить значимые цифры из этого:

  1. Весь захват - это номер, который вы можете передать parseFloat()
  2. . Матчи 1-3 будут отображаться как неопределенные или строки, поэтому объединение их (заменить undefined на '') должно дать исходный номер из которых могут быть извлечены значимые цифры.

Это регулярное выражение также предотвращает совпадение нулевых нулей, которые JavaScript иногда принимает, но которые я видел, вызывают проблемы и которые ничего не добавляют к значительным цифрам, поэтому я см. предотвращение левого запаса нулей в качестве преимущества (особенно в формах). Тем не менее, я уверен, что регулярное выражение может быть изменено, чтобы сожрать левые заполненные нули.

Другая проблема, которую я вижу с этим регулярным выражением, не будет соответствовать 90.e9 или другим таким номерам. Тем не менее, я считаю, что подобные или подобные совпадения маловероятны, так как конвенция в научной нотации позволяет избежать таких чисел.

UPDATE

В моем тестировании я также поймал ошибку в том, что он может соответствовать '.'. Таким образом, внешний вид должен быть изменен на (?=\.\d|\d), что приводит к окончательному регулярному выражению:

/^[+\-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:\d[eE][+\-]?\d+)?$/
0
задан timmy turner 18 January 2019 в 15:24
поделиться

1 ответ

JSON не может быть обнаружен , поскольку запрошенная страница (и driver.page_source) возвращает вам HTML , в то время как вам нужно запросить JSON . Попробуйте этот код, чтобы получить требуемый вывод

import requests

print requests.get('http://example.webscraping.com/places/ajax/search.json?&search_term=a&page_size=10&page=0').json()

Если вам нужно только records:

response = requests.get('http://example.webscraping.com/places/ajax/search.json?&search_term=a&page_size=10&page=0').json()
print response['records'] 

Чтобы получить названия стран:

for item in response['records']:
    print item['country']

Вывод: [ 1112]

'Afghanistan'
'Aland Islands'
'Albania'
'Algeria'
'American Samoa'
'Andorra'
'Angola'
'Anguilla'
'Antarctica'
'Antigua and Barbuda'
0
ответ дан Andersson 18 January 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: