как динамически добавить список в основной URL - PullRequest
0 голосов
/ 12 марта 2020

В настоящее время предположим, что это содержимое, которое я удалил:

[<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>,  
<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>,  
<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>,  
<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>]

Я хочу создать список URL, добавляющий каждый город к основному URL: https://nomadlist.com

и я хочу сделать так, как на выходе:

https://nomadlist.com/taipei,
https://nomadlist.com/lisbon,
https://nomadlist.com/buenos-aires,
https://nomadlist.com/budapest

Может кто-нибудь помочь мне с кодом? Я борюсь за то, чтобы динамически получать информацию о городе и добавлять их один за другим

Ответы [ 4 ]

4 голосов
/ 12 марта 2020

Вот решение, используйте пакет bs4 python.

from bs4 import BeautifulSoup

urls = ['<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>',
        '<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>',
        '<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>',  
        '<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>'
        ]

uri = 'https://nomadlist.com/'
uri_list = []

uri_list = [uri + BeautifulSoup(i, features="lxml").find('a').string.replace(' ', '-').lower() for i in urls]
print(uri_list)

output:

['https://nomadlist.com/taipei', 'https://nomadlist.com/lisbon', 'https://nomadlist.com/buenos-aires', 'https://nomadlist.com/budapest']
1 голос
/ 12 марта 2020

@ Kai Jinglebell Cheng это то, что вы ищете?

nomad_list = ['<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>',  
'<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>',  
'<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>',  
'<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>']

base_link = 'https://nomadlist.com/'
for nomad in nomad_list:
    city = nomad.split(">")[1].split("<")[0].replace(' ', '-').lower()
    full_link = f'{base_link}{city}'
    print(full_link)

Новый ответ после обновленного вопроса ниже

nomad_str = '''["<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>",  
"<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>",  
"<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>",  
"<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>"]'''
nomad_str=nomad_str.replace('"<a', "'<a")
nomad_str=nomad_str.replace('a>"', "a>''")
nomad_str=nomad_str.replace("[\'", '')
nomad_str=nomad_str.replace("'\']", '')
nomad_list = nomad_str.split(',')
base_link = 'https://nomadlist.com/'
for nomad in nomad_list:
    city = nomad.split(">")[1].split("<")[0].replace(' ', '-').lower()
    full_link = f'{base_link}{city}'
    print(full_link)
0 голосов
/ 12 марта 2020

Если вы использовали BeautifulSoup, я думаю, что лучше обрабатывать данные прямо из BeautifulSoup, чем конвертировать сначала в список, подобный так:

from bs4 import BeautifulSoup

html_string = '''
<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>
<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>  
<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>
<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>
'''

base_url = 'https://nomadlist.com'

data = BeautifulSoup(html_string,"html.parser")

filtered_data = data.find_all("a")

url_list = [base_url+"/"+item.get_text().replace(" ","-").lower() for item in filtered_data]

print(url_list)
0 голосов
/ 12 марта 2020

В JavaScript вы можете сделать что-то вроде этого. Вы можете использовать тот же лог c и изменить синтаксис на python.

var baseURL = 'https://nomadlist.com/';
var urls = [];

var strings = ['<a href="" itemprop="url" title="Taipei for Digital Nomads">Taipei</a>','<a href="" itemprop="url" title="Lisbon for Digital Nomads">Lisbon</a>',  
'<a href="" itemprop="url" title="Buenos Aires for Digital Nomads">Buenos Aires</a>',  
'<a href="" itemprop="url" title="Budapest for Digital Nomads">Budapest</a>'];

strings.forEach( x => {
  urls.push(baseURL + x.replace(/<(?:.|\n)*?>/gm, '').toLowerCase().replace(" ","-"));
});

console.log(urls);
...