Como acessar a tabela específica apresentada na inspeção utilizando Python e BeautifulSoup para raspagem web

votos
0

Eu estou trabalhando em raspagem web usando Python e BeautifulSoup. Meu objetivo é extrair dados membros de https://thehia.org/directory?&tab=1 . Há cerca de 1.685 registros.

Quando eu ver o código fonte da página no meu Chrome, eu não consigo encontrar a mesa. Parece que puxa dinamicamente os dados. Mas quando eu usar a opção de inspecionar do Chrome, eu posso encontrar a mesa membersTable no div que eu preciso.

digite

Como posso usar BeautifulSoup para acessar esse membersTable que eu possa acessar no inspecionar.

Publicado 10/10/2019 em 00:49
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Você pode imitar o pedido POST a página faz para conteúdo em seguida, usar hjson para lidar com chaves não cotadas na corda puxada de resposta

import requests, hjson
import pandas as pd

data = {'formId': '3721260'}
r = requests.post('https://thehia.org/Sys/MemberDirectory/LoadMembers', data=data)
data = hjson.loads(r.text.replace('while(1); ',''))
total = data['TotalCount']
structure = data['JsonStructure']
members = hjson.loads(structure)
results = []
df = pd.DataFrame([[member[k][0]['v'] for k in member.keys()] for member in members['members'][0]]
            ,columns = ['Organisation', 'City', 'State','Country'])
print(df)

digite descrição da imagem aqui

Respondeu 10/10/2019 em 08:54
fonte usuário

votos
0

Tente este

   import requests
   from bs4 import BeautifulSoup


    url = "https://thehia.org/directory?&tab=1"
    response = requests.get(url)
    html = response.content

    soup = BeautifulSoup(html)
    table = soup.find('table', attrs={'class': 'membersTable'})

    row_list = []
    for row in table.findAll('tr',{'class':['normal']}):
        data= []
        for cell in row.findAll('td'):
            data.append(cell.text)
        row_list.append(data)

    print(row_list)
Respondeu 10/10/2019 em 04:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more