Cómo manejar múltiples direcciones URL en beautifultsoup y convertir los datos en trama de datos?

s_khan92:

Tengo la lista de la URL, que quiero usar para recuperar los datos. Que pueda hacer por una URL como esta:

URL list = ['https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/4722/',
'https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/6318/'


from bs4 import BeautifulSoup
import requests

url = "https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/4479/"
page = requests.get(url)

soup = BeautifulSoup(page.text, "html.parser")

info = soup.find_all("dl", {'class':'c-description-list c-description-list--striped'})

comp_info = pd.DataFrame()
cleaned_id_text = []
for i in info[0].find_all('dt'):
    cleaned_id_text.append(i.text)
cleaned_id__attrb_text = []
for i in info[0].find_all('dd'):
    cleaned_id__attrb_text.append(i.text)


df = pd.DataFrame([cleaned_id__attrb_text], column = cleaned_id_text)

Pero no estoy seguro de cómo hacer esto por varias URLs y anexar los datos en trama de datos. Cada URL describir la decription supuesto, así que quiero para crear la trama de datos que incluirá todos los datos de la URL de todos ... Y sería bueno si puedo añadir URL también como columna separada en la trama de datos.

aԋɱҽԃ aмеяicai:
import requests
from bs4 import BeautifulSoup
import pandas as pd


numbers = [4722, 6318]


def Main(url):
    with requests.Session() as req:
        for num in numbers:
            r = req.get(url.format(num))
            soup = BeautifulSoup(r.content, 'html.parser')
            target = soup.find(
                "dl", class_="c-description-list c-description-list--striped")
            names = [item.text for item in target.findAll("dt")]
            data = [item.get_text(strip=True) for item in target.findAll("dd")]
            df = pd.DataFrame([data], columns=names)
            df.to_csv("data.csv", index=False, mode="a")


Main("https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/{}/")

Actualizado por usuario-solicitud:

import requests
from bs4 import BeautifulSoup
import pandas as pd


def Main(urls):
    with requests.Session() as req:
        allin = []
        for url in urls:
            r = req.get(url)
            soup = BeautifulSoup(r.content, 'html.parser')
            target = soup.find(
                "dl", class_="c-description-list c-description-list--striped")
            names = [item.text for item in target.findAll("dt")]
            names.append("url")
            data = [item.get_text(strip=True) for item in target.findAll("dd")]
            data.append(url)
            allin.append(data)
        df = pd.DataFrame(allin, columns=names)
        df.to_csv("data.csv", index=False)


urls = ['https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/4722/',
        'https://www2.daad.de/deutschland/studienangebote/international-programmes/en/detail/6318/']
Main(urls)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=365503&siteId=1
Recomendado
Clasificación