网络抓取功能可通过搜索栏循环项目并返回特定关键字作为答案

问题描述 投票:0回答:1

有一个清单

bareas = ['Hosa road', 'Koramangala 4th block', 'Ali Asker road', 'Singasandra']

(它的列表相当长,所以只在这里添加一些项目)。我想创建一个函数,以便每个项目都可以循环通过网页中的搜索栏 -“https://kgis.ksrsac.in”并返回与每个 barea-search-item 对应的区域名称作为列表。我是初学者,如果问题不清楚,请原谅。

import requests
from bs4 import BeautifulSoup

bareas = list(df2015['Area where apartment is situated'].unique())

zone_list = []

for area in bareas:
  url = "https://kgis.ksrsac.in/Bbmpgis/"
  esri-search__form
  data = {'search': area, 'submit': 'Find Address or Place'}
  response = requests.post(url, data=data)

  soup = BeautifulSoup(response.content, 'html.parser')
  zone_element = soup.find('div', class_='lblzn')

  if zone_element:
    zone_list.append(zone_element.text)
  else:
    zone_list.append(None)

print(zone_list)
python parsing web-scraping beautifulsoup python-requests
1个回答
0
投票

尝试:

import requests

params = {
    "SingleLine": "Hosa road",
    "location": '{"spatialReference":{"wkid":102100},"x":8646979.114049532,"y":1449843.5729579679}',
    "maxLocations": "6",
    "outFields": "Addr_type,Match_addr,StAddr,City",
    # "outSR": '{"latestWkid":3857,"wkid":102100}',
    "f": "json",
}

url = "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates"

bareas = ["Hosa road", "Koramangala 4th block", "Ali Asker road", "Singasandra"]

for a in bareas:
    params["SingleLine"] = a
    data = requests.get(url, params=params).json()

    # print(data)

    print(a)
    print("-" * 80)
    for c in data["candidates"]:
        print(c["address"])
    print()

打印:

Hosa road
--------------------------------------------------------------------------------
Hosa Road, Kaikondrahalli, Bengaluru, Karnataka, 560035
Hosa Road, Ambalipura, Bengaluru, Karnataka, 560102
Hosa Road, Kasavanahalli, Bengaluru, Karnataka, 560035
Hosa Road, Kasavanahalli, Bengaluru, Karnataka, 560100
Hosa Road, Rayasandra, Bengaluru, Karnataka, 560100
Hosa Road, Rayasandra, Bengaluru, Karnataka, 560035

Koramangala 4th block
--------------------------------------------------------------------------------
4th Block, Koramangala, Bengaluru, Karnataka
Koramangala Ring Road, Koramangala, Bengaluru, Karnataka, 560095
Koramangala Ring Road, Koramangala, Bengaluru, Karnataka, 560034

Ali Asker road
--------------------------------------------------------------------------------
Ali Asker Road, Shivajinagar, Bengaluru, Karnataka, 560001
Ali Asker Road, Vasanth Nagar, Bengaluru, Karnataka, 560001

Singasandra
--------------------------------------------------------------------------------
Singasandra, Bengaluru, Karnataka
Singasandra, Anekal Sub-District, Bengaluru, Karnataka
Singasandra, Kanakapura, Ramanagara, Karnataka
Singasandra, Chintamani, Chikkaballapura, Karnataka
Singasandra, Turuvekere, Tumakuru, Karnataka
Singasandra, Ramanagara, Karnataka
© www.soinside.com 2019 - 2024. All rights reserved.