Как получить доступ к конкретной таблице, показанной в разделе inspect, с использованием Python и BeautifulSoup для просмотра веб-страниц - PullRequest
1 голос
/ 10 октября 2019

Я работаю над очисткой веб-страниц, используя Python и BeautifulSoup. Моя цель - извлечь данные участников из https://thehia.org/directory?&tab=1.. Здесь около 1685 записей.

Когда я просматриваю исходный код страницы в Chrome, я не могу найти таблицу. Кажется, это динамически вытягивает данные. Но когда я использую опцию проверки Chrome, я могу найти таблицу «membersTable» в нужном мне div.

enter image description here

Как я могу использовать BeautifulSoup для доступа к той таблице участников, к которой я могу получить доступ в проверке.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вы можете имитировать POST-запрос страницы к содержимому, а затем использовать hjson для обработки ключей без кавычек в строке, извлеченной из ответа

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)
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)

enter image description here

0 голосов
/ 10 октября 2019

Попробуйте это

   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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...