Зачистка списков предметов из Википедии - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужно получить всю информацию с этой страницы:

https://it.wikipedia.org/wiki/Categoria:Periodici_italiani_in_lingua_italiana

от символа " до буквы Z.

Тогда:

"
"900", Cahiers d'Italie et d'Europe
A
Abitare
Aerei
Aeronautica & Difesa
Airone (periodico)
Alp (periodico)
Alto Adige (quotidiano)
Altreconomia
....

Чтобы сделать это, я попытался использовать следующий код:

res = requests.get("https://it.wikipedia.org/wiki/Categoria:Periodici_italiani_in_lingua_italiana")
soup = bs(res.text, "html.parser")
url_list = []

links = soup.find_all('a')
for link in links:
    url = link.get("href", "")
    url_list.append(url)

lists_A=[]

for url in url_list:
      lists_A(url)

print(lists_A)

Однако этот код собирает больше информации, чем я нужно. В частности, последний элемент, который я должен собрать, будет La Zanzara (возможно, все элементы не должны содержать слова в скобках, т.е. они не должны содержать (rivista), (periodico), (settimanale) и т. Д., но только название (например, Jack (periodico) должно быть просто Jack).

Не могли бы вы дать мне какой-нибудь совет о том, как получить эту информацию? Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Это поможет вам отфильтровать некоторые нежелательные URL (хотя и не все). В основном все до "Corriere della Sera", которое, как я предполагаю, должно быть первым ожидаемым URL.

links = [a.get('href') for a in soup.find_all('a', {'title': True, 'href': re.compile('/wiki/(.*)'), 'accesskey': False})]

Вы можете смело предполагать, что все URL-адреса журнала упорядочены в этот момент, и, поскольку вы это знаете " La Zanzara "должен быть последним ожидаемым URL-адресом, в котором вы можете получить позицию этой конкретной строки в новом списке и нарезать ее до этого индекса + 1

links.index('/wiki/La_zanzara_(periodico)')
Out[20]: 144

links = links[:145]

Что касается удаления ('periodico') и других данных При очистке вам нужно проверить свои данные и выяснить, что именно вы хотите удалить.

Напишите простую функцию, например, такую:

def clean(string):
    to_remove = ['_(periodico)', '_(quotidiano)']
    for s in to_remove:
        if s in string:
            return replace(string, s, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...