Я хочу извлечь ссылки участников - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь извлечь ссылки следующих участников

from bs4 import BeautifulSoup
import requests
r = requests.get('https://www.aapkiawaz.in/about/doctor-hospital-directory-medical-directory-doctors-doctor-hospital-listing-medical-directory-doctors-listing-medical-directory-doctors-doctor-hospital-guide-medical-directory-d/0')
soup = BeautifulSoup(r.text,'lxml')
##for link in soup.find('span',class_='person_name'):
for link1 in soup.find_all('span',class_='person_name' ):
   link2 = link1.find('a')
   print link2['href']

Я ожидаю ссылки на профили участников, но получаю следующий вывод:

{{project.mainbtnLink}}

1 Ответ

4 голосов
/ 22 апреля 2019

Страница использует javascript для обновления содержимого, и вы видите заполнитель, по сути, для этих обновлений. Вы можете имитировать вызов API POST-запроса, используемый страницей для получения этого содержимого

import requests

data = {
    'type': 'social_data',
    'page' : 1,
    'size' : 50,
    'assigned_group' : 1061,
    'categoryid' : 1070
}

r = requests.post('https://www.aapkiawaz.in/api/social_data.php', data = data).json()
links = [item['mainbtnLink'] for item in r['rec']]
print(links)

Имена:

info = [(item['data']['person_name'], item['mainbtnLink']) for item in r['rec']]

Распакуйте кортежи в 2 списка:

names, links = zip(*[(item['data']['person_name'], item['mainbtnLink']) for item in r['rec']])

Dataframe:

import pandas as pd

info = [(item['data']['person_name'], item['mainbtnLink']) for item in r['rec']]
df = pd.DataFrame(info, columns = ['name' , 'link'])
print(df)
...