Как я могу извлечь контент из определенного html div из списка URL-адресов в кадре данных, используя beautifulsoup? - PullRequest
0 голосов
/ 17 марта 2020

Я анализирую текст из указанного c div в нескольких URL-адресах.

Все примеры, которые я нашел, требуют ввода одного URL, но в моем случае я работаю в большом количестве.

Есть предложения?

1 Ответ

0 голосов
/ 17 марта 2020

Давайте разделим эту проблему на части.

Сначала мы хотим получить один URL и вернуть соответствующий документ HTML. Делая это отдельно, мы также можем прозрачно обрабатывать ошибки и таймауты.

def get_raw_content(url):
     tmp = requests.get(r.url, timeout=10)
     return tmp.content if tmp.status_code == 200 else None

Далее следует интересный момент. Учитывая один HTML документ, мы теперь хотим извлечь контент для определенного div. Вот где должен быть ваш оригинальный код.

Вы также можете использовать XPATH для этого. Но BeautifulSoup не поддерживает XPATH. Я написал модуль, который предоставляет простой интерпретатор XPATH для bs4. Если вам это нужно, просто дайте мне знать в комментариях.

def get_div_content(url):

    # first fetch the content for this URL
    html_text = get_raw_content(url)
    if html_text is None:
        return None

    # work with beautiful soup to fetch the content you need
    # TODO : insert your code for 1 URL here
    return None

Теперь, как указано в других комментариях, мы просто перебираем все имеющиеся у нас URL-адреса и выполняем код для одного URL-адреса на каждом из них. в свою очередь.

def fetch_all(urls):
    for url in urls:
        txt = get_div_content(url)
        print('{} {}'.format(url, txt))

Наконец, нам нужна точка входа для сценария python. Итак, я предоставил этот основной метод.

if __name__ == '__main__':
    fetch_all(['http://www.google.com', 'http://www.bing.com'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...