2016-04-15 3 views
-7

Я новичок в python и просто хотел узнать, возможно ли это: я очистил URL-адрес, используя urllib и хочу редактировать разные страницы.Невозможно изменить URL-адрес с помощью python

Пример: http://test.com/All/0.html

Я хочу 0.html стать 50.html, а затем 100.html и так далее ...

+1

Да, возможно изменение последней части URL-адреса. – vaultah

+0

спасибо, но как мне это сделать. ive попробовал url.split, но, похоже, он не смог изменить правильную часть URL-адреса. или я могу очистить все в один, а не один за один раз. –

+2

Просто google-версия «python modify url», первая ссылка была [Изменить URL-компоненты в Python 2] (http://stackoverflow.com/q/24200988/2301450). Вы даже можете использовать 'str.rpartition' или' str.split'. Если у вас есть * конкретная * проблема с вашим кодом, укажите код, который вы написали до сих пор, пример ввода (если есть), ожидаемый вывод и вывод, который вы фактически получаете (вывод консоли, трассировка и т. Д.), – vaultah

ответ

0
found_url = 'http://test.com/All/0.html' 

base_url = 'http://test.com/All/' 

for page_number in range(0,1050,50): 
    url_to_fetch = "{0}{1}.html".format(base_url,page_number) 

Это должно дать вам URL-адресов из 0.html в 1000.html

Если вы хотите использовать urlparse (как указано в комментариях к лету ур вопрос):

import urlparse 

found_url = 'http://test.com/All/0.html' 
parsed_url = urlparse.urlparse(found_url) 
path_parts = parsed_url.path.split("/") 

for page_number in range(0,1050,50): 
    new_path = "{0}/{1}.html".format("/".join(path_parts[:-1]), page_number) 
    parsed_url = parsed_url._replace(path= new_path) 
    print parsed_url.geturl() 

Выполнение этого сценария даст вам следующее:

http://test.com/All/0.html 
http://test.com/All/50.html 
http://test.com/All/100.html 
http://test.com/All/150.html 
http://test.com/All/200.html 
http://test.com/All/250.html 
http://test.com/All/300.html 
http://test.com/All/350.html 
http://test.com/All/400.html 
http://test.com/All/450.html 
http://test.com/All/500.html 
http://test.com/All/550.html 
http://test.com/All/600.html 
http://test.com/All/650.html 
http://test.com/All/700.html 
http://test.com/All/750.html 
http://test.com/All/800.html 
http://test.com/All/850.html 
http://test.com/All/900.html 
http://test.com/All/950.html 
http://test.com/All/1000.html 

Вместо печати в течение цикла можно использовать значение parsed_url.geturl() в соответствии с вашими потребностями. Как упоминалось выше, если вы хотите получать содержание страницы, вы можете использовать питона requests модуль следующим образом:

import requests 

found_url = 'http://test.com/All/0.html' 
parsed_url = urlparse.urlparse(found_url) 
path_parts = parsed_url.path.split("/") 

for page_number in range(0,1050,50): 
    new_path = "{0}/{1}.html".format("/".join(path_parts[:-1]), page_number) 
    parsed_url = parsed_url._replace(path= new_path) 
    # print parsed_url.geturl() 
    url = parsed_url.geturl() 
    try: 
     r = requests.get(url) 
     if r.status_code == 200: 
      with open(str(page_number)+'.html', 'w') as f: 
       f.write(r.content) 
    except Exception as e: 
     print "Error scraping - " + url 
     print e 

Это извлекает содержимое из http://test.com/All/0.html до http://test.com/All/1000.html и сохраняет содержимое каждого URL в свой собственный файл , Имя файла на диске будет именем файла в URL-адресе: 0.html до 1000.html

В зависимости от производительности сайта, который вы пытаетесь очистить от вас, могут возникнуть значительные задержки при запуске скрипта. Если производительность важна, вы можете рассмотреть возможность использования grequests

+0

спасибо, что LearnerEarner работает отлично, но его отсчет назад от 1000, а не вперед –

+0

глупый мой, не считая назад, он выбирает последний элемент в диапазоне. Мне нужно это сделать. Шаг –

+0

@SimonBrown. Я не совсем понял ваш второй комментарий ... – LearnerEarner

Смежные вопросы