我需要抓取一个页面,网站如下: 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”按钮后页面中显示的抓取表格,但我需要网络部分中的详细信息
我需要刮一页
我建议使用 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
等