Невозможно распечатать один раз, чтобы получить все данные в целом - PullRequest
0 голосов
/ 30 июня 2019

Я написал скрипт на python для очистки табличного контента с веб-страницы.В первом столбце основной таблицы есть имена.Некоторые имена имеют ссылки для перехода на другую страницу, некоторые - просто имена без каких-либо ссылок.Мое намерение состоит в том, чтобы проанализировать строки, когда имя не имеет ссылки на другую страницу.Однако, когда имя имеет ссылку на другую страницу, сценарий сначала анализирует соответствующие строки из основной таблицы, а затем следует по этой ссылке для анализа связанной информации об этом имени из таблицы, расположенной внизу под заголовком Companies.Наконец, запишите их в CSV-файл.

ссылка на сайт

Я пробовал до сих пор:

import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup

link = "https://suite.endole.co.uk/insight/company/ajax_people.php?ajax_url=ajax_people&page=1&company_number=03512889"
base = "https://suite.endole.co.uk"

res = requests.get(link)
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select("table tr")[1:]:
    if not item.select_one("td a[href]"):
        first_table = [i.text for i in item.select("td")]

        print(first_table)

    else:
        first_table = [i.text for i in item.select("td")]

        print(first_table)

        url = urljoin(base,item.select_one("td a[href]").get("href"))
        resp = requests.get(url)
        soup_ano = BeautifulSoup(resp.text,"lxml")
        for elems in soup_ano.select(".content:contains(Companies) table tr")[1:]:
            associated_info = [elem.text for elem in elems.select("td")]

            print(associated_info)

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

1 Ответ

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

Поместите все свои списанные данные в список, здесь я назвал список associated_info, тогда все данные находятся в одном месте, и вы можете перебирать список, чтобы распечатать его в CSV, если хотите ...

import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup

link = "https://suite.endole.co.uk/insight/company/ajax_people.php?ajax_url=ajax_people&page=1&company_number=03512889"
base = "https://suite.endole.co.uk"

res = requests.get(link)
soup = BeautifulSoup(res.text,"lxml")
associated_info = []

for item in soup.select("table tr")[1:]:

    if not item.select_one("td a[href]"):
        associated_info.append([i.text for i in item.select("td")])

    else:
        associated_info.append([i.text for i in item.select("td")])

        url = urljoin(base,item.select_one("td a[href]").get("href"))
        resp = requests.get(url)
        soup_ano = BeautifulSoup(resp.text,"lxml")

        for elems in soup_ano.select(".content:contains(Companies) table tr")[1:]:
            associated_info.append([elem.text for elem in elems.select("td")])

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