AttributeError: у объекта 'list' нет атрибута 'timeout' - Попытка обработать несколько URL-адресов с помощью BeautifulSoup - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь получить и проанализировать несколько URL-адресов, используя urllib и BeautifulSoup, но получаю следующую ошибку:

AttributeError: у объекта 'list' нет атрибута 'timeout'

Из того, что я понимаю, парсер говорит мне, что я отправил список, и он ищет один URL.Как я могу обработать несколько URL-адресов?

Вот мой код:

from bs4 import BeautifulSoup
from bs4.element import Comment
import urllib.request


def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True

addresses = ["https://en.wikipedia.org", "https://stackoverflow.com", "https://techcrunch.com"]

def text_from_html(body):
    soup = BeautifulSoup(body, 'html.parser')
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts)  
    return u" ".join(t.strip() for t in visible_texts)

html = urllib.request.urlopen(addresses).read()
print(text_from_html(html))

1 Ответ

0 голосов
/ 19 октября 2018

В вашей ошибке четко сказано: 'list' object has no attribute 'timeout'

Это потому, что urlopen не входит в список.Вы должны вложить его в такой цикл:

my_texts = []
for each in addresses
    html = urllib.request.urlopen(addresses).read()
    print(text_from_html(html)) # or assign to variable like:
    my_texts.append(text_from_html(html))

Я бы посоветовал вам использовать модуль http лучше, чем urllib, вместо этого используйте requests (import requests)

...