При просмотре веб-страниц при попытке подсчитать количество элементов на странице я получаю 1, хотя их больше 1 - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в веб-очистке, и я пытаюсь веб-очистить страницу в качестве практики.В какой-то момент я пытаюсь подсчитать количество HTML-дивов с определенным именем класса.Несмотря на то, что при проверке страницы их больше одного, при использовании функции len() она учитывается только один.Код выглядит следующим образом:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'random_url'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div", {"class":"row"})

len(containers)

Наконец, len(containers) возвращает только один, когда я ясно вижу более одного в браузере.

Любая помощь будет оценена.Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

Информация об адресе создается с использованием javascript, поэтому вы не сможете читать информацию через HTML, не используя что-то вроде селена для автоматизации веб-браузера.

В вашем случае, однако, вся адресная информация на самом деле возвращается в виде JSON на эту страницу, поэтому все, что вам нужно сделать, это воссоздать вызов, который делает браузер, чтобы получить данные и использовать их вместо:

from urllib.request import urlopen as uReq
import json
import re

my_url = 'https://www.haart.co.uk/umbraco/api/branches/getsales/HRT'
uClient = uReq(my_url)
page_json = uClient.read()
uClient.close()

addresses = json.loads(page_json)

for address in addresses:
    print(address['headline'])
    print(re.sub(r'\<.*?\>', '', address['address']))
    print(address['email'].strip())
    print(address['telephone'])
    print()

Это будет отображать адреса, начинающиеся с:

Abbots Langley Estate Agents
haart Abbots Langley,30 High Street,Abbots Langley,Hertfordshire,WD5 0AR.
abbots.langley@haart.co.uk
01923 269444

Arnold Estate Agents
Arnold haart,12 Croft Street,Arnold,Nottinghamshire,NG5 7DX.
arnold@haart.co.uk
0115 926 8877

Ashford (Kent) Estate Agents
haart Ashford (Kent),3-4 Kings Parade, High Street,Ashford, Kent, TN24 8TA.
ashfordkent@haart.co.uk
01233 620340

Это использует регулярное выражение для удаления дополнительных тегов форматирования HTML внутри адреса.

ЕслиВы используете сетевые инструменты вашего браузера, вы можете видеть все запросы, которые делает страница.Среди всего этого вы должны видеть адреса как JSON.Затем он позволяет увидеть запрос, который был сделан для получения этих данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...