#web-scraping #beautifulsoup
#веб-очистка #beautifulsoup
Вопрос:
Я пытаюсь очистить этот конкретный URL-адрес, чтобы получить информацию о названии филиала / банкомата и адресе местоположения.
url="https://www.bankmayapada.com/en/contactus/location-information"
Однако файл soup, который я получаю, довольно запутанный, и я не могу понять, как извлечь необходимую информацию.
Нужная мне информация — это название филиала / банкомата и соответствующий ему адрес. Прямо сейчас я просто выясняю структуру файла soup.
import re
import requests
from bs4 import BeautifulSoup
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
print(soup.prettify())
Ответ №1:
Вы можете получить данные этой таблицы с помощью одного POST
запроса. Забавный факт, полезная нагрузка не требуется!
Вот как:
import requests
from bs4 import BeautifulSoup
page = requests.post("https://myapps.bankmayapada.com/frontend/IN/lokasi.aspx").text
rows = BeautifulSoup(page, "html.parser").find_all("tr", {"class": "dxgvDataRow"})
branch_location_data = []
for row in rows:
province, area, location = row.find_all("td")
branch_location_data.append(
[
province.getText(strip=True), # province column
area.getText(strip=True), # area column
location.find("b").getText(strip=True), # Branch name
" ".join(
d.getText() for d in location.find_all("div") # branch address
if not d.getText().startswith(("Tel", "Fax")) # skipping Phone amp; Fax info
),
]
)
for branch in branch_location_data:
print(branch)
Вывод:
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Citra Garden 2', 'Rukan Citra Niaga Blok A-7 Jl. Utan Jati - Kalideres Jakarta - DKI Jakarta']
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Puri Indah', 'Jl. Puri Indah Raya Blok I No. 2 Jakarta 11610 - DKI Jakarta']
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Pasar Pagi Asemka', 'Jl. Pasar Pagi No. 84 Jakarta - DKI Jakarta']
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Tanjung Duren', 'Jl. Tanjung Duren No. 91 B Jakarta 11470 - DKI Jakarta']
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Meruya', 'Jl. Meruya Ilir Raya No. 82 G Jakarta - DKI Jakarta']
['DKI JAKARTA', 'Jakarta Barat', 'Kantor Capem Jembatan Lima', 'Jl. KH Moch. Mansyur No. 24 A Jakarta - DKI Jakarta']
and so on...
Комментарии:
1. TIL! Вы не возражаете немного расширить (или сослаться на некоторые источники)?
Fun fact, no payload required!
2. Ну, честно говоря, все, что я сделал, это посмотрел на трафик в инструменте разработчика и проверил запрос, который отвечал за таблицу. На
Headers
вкладке это просто стена текста, и я подумал, какого черта, позвольте мне просто отправить aPOST
без всего этого мусора. Что может пойти не так? Ничего! Я вернул всю таблицу вместе с некоторыми другими материалами. Нет полезной нагрузки, нет ничего. Это просто сработало.3. » myapps.bankmayapada.com/frontend/IN/lokasi.aspx » имеет выбор названий филиалов по умолчанию. Но я хочу проделать то же упражнение и для имен и адресов банкоматов. URL-адрес не меняется, когда я выбираю опцию atm. Как я могу сделать то же самое для банкоматов?
4. Вау! Мне никогда не приходило в голову попробовать это! Я просто посмотрел на
GET
«стену текста» заголовков и собирался сказать «забудьте об этом», когда вы опубликовали свой ответ. Теперь я собираюсь пробовать это на регулярной основе… Спасибо за идею!