функция с циклом для URL не будет возвращать их все - PullRequest
0 голосов
/ 21 мая 2018

Я работаю над проектом по извлечению подробностей из государственных отчетов о проверках ресторанов.Каждый осмотр имеет свой собственный URL.Я могу собрать значения в словарь, но возвращать только одно за раз.При вызове функции, если я не указываю конкретную запись библиотеки, я получаю сообщение об ошибке: у объекта «list» нет атрибута «timeout». Если он запрашивает определенную запись, я получаю хороший возврат.Как я могу получить их все?

# loop through the url list to gather inspection details
detailsLib = {}
def get_inspect_detail(urlList):
    html = urlopen(urlList)
    soup = bs4.BeautifulSoup(html.read(), 'lxml')
    details = soup.find_all('font', {'face': 'verdana'})[10:]
    result = []
    for detail in details:
        siteName = details[0].text
        licNum = details[2].text
        siteRank = details[4].text

        detailsLib = {
            'Restaurant': siteName,
            'License': licNum,
            'Rank': siteRank,
        }
        result.append(detailsLib)

    return result

get_inspect_detail(urlList[21])

Таким образом, я могу получить 21-й ресторан в списке, повторяя 36 раз, но не все из них.Другой вопрос для другого дня - где сделать уборку.Детали требуют некоторого регулярного выражения, но я не уверен, делать ли это внутри функции (по одному за раз) или вне функции, вызывая все значения из определенного ключа в библиотеке.

1 Ответ

0 голосов
/ 21 мая 2018

Вызовите get_inspect_detail() один раз за элемент в urlList и сохраните все результаты.

all_results = []
for url in urlList:
    details = get_inspect_detail(url)
    all_results.extend(details)
...