Я хочу извлечь данные членов по данной ссылке - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь извлечь данные из ссылки ниже, но не получаю, код показывает ошибку

from bs4 import BeautifulSoup
import requests
r =requests.get('http://www.smcasurat.org/Member/DirectorySearch#')
soup = BeautifulSoup(r.text,'lxml')

data = soup.find('section',class_='part_one')
name = data.find('h4')
print name.text
qual = data.find('h5')
print qual.text
contact = data.find('div',class_='media')
contact1 = contact.find('p')
print contact1.text
email = data.find('div',class_='media-body')
email1 = email.find('p')
print email1.text

ERROR-Traceback (последний вызов был последним): Файл "C: \Python27 \ smcasurat.py ", строка 19, в name = data.find ('h4') AttributeError: у объекта 'NoneType' нет атрибута 'find'

1 Ответ

0 голосов
/ 19 апреля 2019

Намного проще получить доступ к ответу json, который отображает эти данные.

import requests

url = 'http://www.smcasurat.org/Member/DirecotrySerach'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

payload = {
'type': 'ALL',
'value': '',
'pageindex': '1',
'pagesize': '9999'}

jsonData = requests.post(url, headers=headers, params=payload).json()


for member in jsonData['Data']:
    name = member['FirstName'] + ' ' + member['LastName']
    qual = member['MemberDegree'].strip()
    email = member['Email1']    
    try:
        contact = '\n'.join([v.strip() for k, v in member['Clinicinfo'][0].items() if v != ''])
    except:
        contact = '-'


    print('%s\n%s\n%s\n%s\n' %(name, qual, contact, email))

Чтобы увидеть вывод:

for member in jsonData['Data']:
    name = member['FirstName'] + ' ' + member['LastName']
    qual = member['MemberDegree'].strip()

    try:
        contact = member['Clinicinfo'][0]['Phone1']
    except:
        contact = '-'

    email = member['Email1']

    print('%s\n%s\n%s\n%s\n' %(name, qual, contact, email))   

Или вы можете использовать json_normalize и преобразовать его в датафрейм

from pandas.io.json import json_normalize

df = json_normalize(jsonData['Data'])

Если вы хотите просмотреть файл, просто используйте его и откройте в блокноте ++

import json
with open('C:/data.json', 'w') as outfile:
    json.dump(jsonData, outfile, indent=4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...