使用 Selenium 和 Python 迭代 div 以获取表

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

我正在尝试使用 python 和 selenium 从以下站点获取信息: https://conveniomarco.mercadopublico.cl/alimentos/marketplace/seller/profile/shop/797095-5800279

它有两个部分: “商业条件”和 “地区条件”

我需要将“Condiciones Regionales”部分的所有表格放入数据框中,包括表格之外的标题。

我可以使用以下代码获取所有表格信息:

html=driver.find_element(By.CSS_SELECTOR, "body").get_attribute('outerHTML')
pd.read_html(html)[0]...
pd.read_html(html)[2]

但是通过这种方式,我失去了标题,例如“Region de Coquimbo”,因为这不是表格的一部分。

我一直在尝试迭代所有 div 以获取标题,然后获取内部表格,使用以下代码:

condiciones_regionales=driver.find_element(By.CSS_SELECTOR, "div.wk_mp_design div.wk-mp-custom-regional div.wk-mp-profile-block div.wk-mp-aboutus-data div.box-regional-info")
condiciones=condiciones_regionales.find_elements(By.CSS_SELECTOR, "div.item")
    item2=[]
    for item2 in condiciones_regionales:
        print(item2.text)

但我收到错误:“'WebElement'对象不可迭代”

如何解决?

谢谢

python pandas selenium-webdriver web-scraping
1个回答
2
投票

您可以使用以下代码获取所有这些表格:

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
from io import StringIO

url = 'https://conveniomarco.mercadopublico.cl/alimentos/marketplace/seller/profile/shop/797095-5800279'

headers = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}

r = requests.get(url, headers=headers)
soup = bs(r.text, 'html.parser')

cod_reg_div = soup.select_one('div[id="box-content-regional"]')
titles = cod_reg_div.select('div[class="item"] div[class="title"]')
for t in titles:
    df = pd.read_html(StringIO(str(t.find_next('div', {'class': 'content'}))))[0]
    df['region'] = t.text.strip()
    print(df)

终端结果:

    0   1   region
0   Nombre del Contacto EGIDIO VILLA    Región de Antofagasta
1   Teléfono de Contacto    29335564    Región de Antofagasta
2   Correo de Contacto  [email protected]  Región de Antofagasta
3   Plazo de entrega máximo (días hábiles)  10  Región de Antofagasta
4   Tiempo de entrega en emergencia o catástrofe (...   192 Región de Antofagasta
5   Monto Máximo Orden de Compra    $0  Región de Antofagasta
6   Comunas de la región donde no se realiza despacho   NaN Región de Antofagasta
0   1   region
0   Nombre del Contacto EGIDIO VILLA    Región de Coquimbo
1   Teléfono de Contacto    29335564    Región de Coquimbo
2   Correo de Contacto  [email protected]  Región de Coquimbo
3   Plazo de entrega máximo (días hábiles)  5   Región de Coquimbo
4   Tiempo de entrega en emergencia o catástrofe (...   72  Región de Coquimbo
5   Monto Máximo Orden de Compra    $0  Región de Coquimbo
6   Comunas de la región donde no se realiza despacho   NaN Región de Coquimbo

[...]

对于 pandas 文档,请访问这里,对于请求,这里

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