Получение сведений об адвокате из разных ссылок сайта с использованием bs4 в python - PullRequest
1 голос
/ 11 июня 2019

Я абсолютный новичок в Web Scraping, использующем Python, с очень небольшими знаниями в программировании на Python. Я просто пытаюсь получить информацию о юристах в штате Теннесси. На веб-странице есть несколько ссылок, внутри которых есть еще больше ссылок о категориях юристов, и внутри них есть подробности о юристах.

Я уже извлек ссылки различных городов в список, а также выделил различные категории юристов, доступных в каждой из ссылок города. Кроме того, я извлек URL каждого из юристов в отдельные категории и сохранил их в отдельном наборе. Теперь я перебрал эти URL для получения сведений о юристах и, наконец, записал их в файл .xls. Но пока я выполняю свой код, процесс продолжается неопределенное количество времени. Я вынужден остановить процесс, и даже .xls файл не создается в нужном месте, как указано в программе. Что можно сделать? Если возможно, предложите.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

final=[]
records=[]
with requests.Session() as s:
    res = s.get('https://attorneys.superlawyers.com/tennessee/', headers = {'User-agent': 'Super Bot 9000'})
    soup = bs(res.content, 'lxml')

    cities = [item['href'] for item in soup.select('#browse_view a')]
    for c in cities:
        r=s.get(c)
        s1=bs(r.content,'lxml')
        categories = [item['href'] for item in s1.select('.three_browse_columns:nth-of-type(2) a')]
        for c1 in categories:
            r1=s.get(c1)
            s2=bs(r1.content,'lxml')
            lawyers = [item['href'].split('*')[1] if '*' in item['href'] else item['href'] for item in
                       s2.select('.indigo_text .directory_profile')]



            for i in lawyers:
                r2 = s.get(i)
                s3 = bs(r2.content, 'lxml')
                name = s3.select_one('#lawyer_name').text
                category = s3.select_one('#attorney_profile_heading').text
                firm = s3.select_one('#firm_profile_page').text
                address = ' '.join([string for string in s3.select_one('#poap_postal_addr_block').stripped_strings][1:])
                practices = ' '.join([item.text for item in s3.select('#pa_list li')])
                records.append({'Names': name,'Category':category,'Address': address, 'Firm Name': firm,'Practice Area':practices})
df = pd.DataFrame(records,columns=['Names','Category','Address','Farm Name','Practice Areas'])
df=df.drop_duplicates()
df.to_excel(r'C:\Users\laptop\Desktop\lawyers.xls', sheet_name='MyData2', index = False, header=True)

"Я ожидал, что программа завершит свое выполнение и создаст файл .xls, но он продолжает выполняться, и даже я не знаю, сколько времени потребуется для завершения его выполнения. Есть ли вероятность, что бесконечный цикл произошло? Если возможно, предложите. "

1 Ответ

1 голос
/ 12 июня 2019

Я вижу, что данные, которые вы пытаетесь очистить, слишком много, и использование BeautifulSoup займет много времени, я попытался очистить этот сайт и даже после разделения поиска на четыре разных программных файла Потребовалось около 12 часов, чтобы успешно завершить выполнение, я также попробовал ваш код для только Брентвуд Сити , и это заняло около часа. Я не вижу бесконечного цикла в вашем коде! пусть бегут и набираются терпения.

Кроме того, ваша программа не создала никакого XML-файла, поскольку она не достигла этой части кода.

PS: я знаю, что это должен быть комментарий, но в настоящее время у меня недостаточно репутации, чтобы сделать это. Надеюсь, что этот ответ поможет вам и мне завоевать репутацию, чтобы иметь возможность комментировать в следующий раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...