Вопрос об итерации и оптимизации - PullRequest
0 голосов
/ 21 мая 2019

Впервые в Python 3, и я решил, что моим первым проектом будет веб-скребок ...

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

Я попытался сделать это как один цикл с тремя вложенными циклами внутри, и только первые значения окажутся в массиве.

        for card in soup.find_all("div", class_="result"):
            for card in card.find_all('a', attrs={'class': 'jobtitle'}):
                job_data['Job Title'] = card.getText().strip()

        for card in soup.find_all("div", class_="result"):
            for card in card.find_all('span', attrs={'class': 'company'}):
                job_data['Company'] = card.getText().strip()

        for card in soup.find_all("div", class_="result"):      
            for card in card.find_all('div', attrs={'class': 'summary'}):
                job_data['Summary'] = card.getText().strip()

            print(job_data)

Мне просто интересно, есть ли более аккуратный способ сделать это - мой текущий код работает, но он не кажется самым элегантным решением ...

1 Ответ

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

Поскольку ваш начальный цикл такой же, вы можете выполнить все три своих внутренних цикла за один проход внешнего цикла.Вы также, вероятно, хотите печатать данные только один раз, поэтому не делайте отступ в этой строке.

Это можно увидеть в следующем:

for card in soup.find_all("div", class_="result"):
    for card in card.find_all('a', attrs={'class': 'jobtitle'}):
        job_data['Job Title'] = card.getText().strip()
    for card in card.find_all('span', attrs={'class': 'company'}):
        job_data['Company'] = card.getText().strip()
    for card in card.find_all('div', attrs={'class': 'summary'}):
        job_data['Summary'] = card.getText().strip()

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