抓取页面中元素的网络部分的内容

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

我需要抓取一个页面,网站如下: https://commercialisti.it/iscritti 它只有意大利语,但仍然是我可以通过“Cap”搜索的专业人士列表。

例如,通过在 Cap 中填充值 37138,然后按“CERCA”,它将显示包含一些数据的专业人员列表。我发现,如果我检查页面,转到网络,然后在元素

LstIscritti?_=1713434471262
上有一个包含我需要的所有数据的 JSON。 问题是我不明白如何通过进入网站的这一部分来抓取。

我尝试使用 beautifulsoup 但我只能抓取主页的 html

到目前为止我的代码:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://commercialisti.it/iscritti')
driver.implicitly_wait(10)

driver.switch_to.frame(driver.find_element(By.XPATH, "(//iframe)[1]"))

casella_testo = driver.find_element("id", "Cap")
casella_testo.send_keys("37138")

pulsante_cerca = driver.find_element("id", 'btnContinua')
pulsante_cerca.click()


time.sleep(5)


res = driver.find_element("id", "listIscritti")

time.sleep(10)

res
的内容是按“CERCA”按钮后页面中显示的抓取表格,但我需要网络部分中的详细信息

python beautifulsoup
1个回答
0
投票

我需要刮一页

我建议使用 requests 而不是 selenium, 因为删除浏览器会让事情变得更简单。

看起来按下第一个按钮会发送一个返回一些会话 cookie 的请求。
之后,您可以再次请求数据。

from bs4 import BeautifulSoup
import requests

# Request search
r = requests.get("https://ricerca.commercialisti.it/RicercaIscritti",
                 params={
                     "search": "True",
                     "ente": "00000000-0000-0000-0000-000000000000",
                     "cap": 37138,
                     "sezione": 0
                 })

# Copy session cookies from the request
cookies = r.cookies

# Make a request for the data
r = requests.post("https://ricerca.commercialisti.it/DDLSourceLists/LstOrdiniNonSoppressi/",
                  params={
                      "addempty": "true"
                  },
                  data={
                      "sort": "",
                      "group": "",
                      "filter": ""
                  },
                  allow_redirects=False,
                  cookies=cookies)

# Parse data for later use
data = r.json()

# View data
import json
print(json.dumps(data, indent=4))

结果如下:

[
    {
        "id": "00000000-0000-0000-0000-000000000000",
        "Description": "{name1}",
        "IdCategoriaEnte": 0
    },
    {
        "id": "00000000-0000-0000-0000-000000000000",
        "Description": "{name2}",
        "IdCategoriaEnte": 1
    },
    ...
]

您可以在任何浏览器或外部 Web 调试代理中使用开发人员控制台,例如:

Charles
Burp Suite
mitmproxy

了解如何重新创建浏览器发出的请求。

© www.soinside.com 2019 - 2024. All rights reserved.