Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
1

Как через urlopen() загрузить все страницы с меняющейся частью?

16.07.2013, 19:02. Просмотров 1195. Ответов 2
Метки нет (Все метки)

На многих сайтах отображается не одна страница ,а несколько (индексация внизу: 1, 2, 3, ...и.т.п.) Так вот как с помощью функции urlopen осуществить загрузку всех имеющихся страниц. Обычно при переходе между страницами в адресной строке меняется один параметр
Код
http://mnimiq_sait.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=5
где после sp как раз и стоит номер любой страницы (1,...n)
Предлагали вариант вместо urlopen использовать класс
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class test(object):
    conn = HTTPConnection
    SERVER = "yandex.ru"
    def __init__(self):
        self.conn = HTTPConnection(self.SERVER)
 
    def closeconn(self):
        self.conn.close()
 
    def response(self,request):
        resp = ""
        j = 0
        while (resp == "" and j < 3):
             try:
                j+=1
                self.conn.request("GET",request)
                response = self.conn.getresponse()
                resp = response.read().decode("utf-8")
             except Exception as error:
                pprint(error)
                self.conn.close()
                time.sleep(5)
                self.conn = HTTPConnection(self.SERVER)
                continue
        return resp
Но я не разобрался как же можно и для него осуществить множественный перебор всех страниц.
Объясните по данной теме пожалуйста. Если есть примеры - лучше на примерах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 19:02
Ответы с готовыми решениями:

При скачивании страницы urlopen() выдаёт "urlopen error [Errno 10051]"
Добрый день. Столкнулся с бедой есть элементарный скрипт который просто должен...

Как правильно обработать ошибку urlib2 (urlopen)
При парсинге постоянно возникают ошибки urlib2, вот такие например...

Urlopen Непонятное поведение
Приветствую всех в этой теме!:) Возникла такая проблема...Объясню лучше...

Не могу загрузить код страницы через synapse
Помогите разобраться, synapse начал изучать недавно, поэтому и не могу понять...

Как получить код страницы, после того, как все скрипты данной страницы отработают, и выдадут все результаты?
Добрый день! Хотелось бы узнать, как получить код страницы, после того как...

2
pashtet-kun
134 / 119 / 36
Регистрация: 30.09.2012
Сообщений: 395
16.07.2013, 19:54 2
оформи код в питоновые теги - глаза сломать не хочется)
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
17.07.2013, 21:05 3
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import urllib.request
 
pat = 'http://etp.setonline.ru/app/Search/direct/' \
      'offers.pages.linkPage;jsessionid=' \
      'F364BED5A476D49A953356B1667EE0FD?sp={}'
 
start = 0
end = 5
      
def main():
    for i in range(start, end + 1):
        url = pat.format(i)
        text = load(url)
        print(url)
        index = text.index('ParametrizedPageLink_4')
        print(text[index:index + 200])
 
def load(url):
    with urllib.request.urlopen(url) as data:
        charset = 'utf-8'
        return data.read().decode(charset)
 
main()
Добавлено через 1 минуту
пример
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
>>> import urllib.request
>>> 
>>> pat = 'http://etp.setonline.ru/app/Search/direct/' \
...       'offers.pages.linkPage;jsessionid=' \
...       'F364BED5A476D49A953356B1667EE0FD?sp={}'
>>> 
>>> start = 0
>>> end = 5
>>>       
... def main():
...     for i in range(start, end + 1):
...         url = pat.format(i)
...         text = load(url)
...         print(url)
...         index = text.index('ParametrizedPageLink_4')
...         print(text[index:index + 200])
... 
>>> def load(url):
...     with urllib.request.urlopen(url) as data:
...         charset = 'utf-8'
...         return data.read().decode(charset)
... 
>>> main()
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=0
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebofs000080000jvpkd0gd98dbftk">
                    <span id="subject.corebofs000080000jvpkd0gd98dbftk">Запрос предложений на ремонт
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=1
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebofs000080000jvjf1289knaaiog">
                    <span id="subject.corebofs000080000jvjf1289knaaiog">Обучение по охране труда для
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=2
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebofs000080000jvpmqkf67aoki38">
                    <span id="subject.corebofs000080000jvpmqkf67aoki38">поставка продукции материаль
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=3
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebofs000080000jvohb1h89rontbc">
                    <span id="subject.corebofs000080000jvohb1h89rontbc">оказание услуг по поставке и
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=4
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebo0k4md180000jvkj5jf15bhj2sg">
                    <span id="subject.corebo0k4md180000jvkj5jf15bhj2sg">Оказание услуг по печати «Пр
http://etp.setonline.ru/app/Search/direct/offers.pages.linkPage;jsessionid=F364BED5A476D49A953356B1667EE0FD?sp=5
ParametrizedPageLink_4" href="/app/OfferCard/page?OfferCard.offerUUID=Scorebofs000080000jvj4ldfben1p4l4">
                    <span id="subject.corebofs000080000jvj4ldfben1p4l4">оказание услуг в целях аттес
>>>


Добавлено через 23 часа 25 минут
добавил определение кодировки
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python3
 
import urllib.request
import re
 
urlpat = 'http://etp.setonline.ru/app/Search/direct/' \
         'offers.pages.linkPage;jsessionid=' \
         'F364BED5A476D49A953356B1667EE0FD?sp={}'
 
start = 0
end = 5
 
def main():
    urls = map(urlpat.format, range(start, end + 1))
    for url in urls:
        text = load(url)
        
        print(url)
        index = text.index('ParametrizedPageLink_4')
        print(text[index:index + 200])
 
def load(url):
    with urllib.request.urlopen(url) as data:
        charset = get_charset(data.getheader('content-type'))
        return data.read().decode(charset)
 
def get_charset(header):
    match = re.search(r'charset=([^\s;]+)', header)
    if match:
        return match.group(1).strip('"\'').lower()
 
main()
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 21:05

Как реализовать табы внутри табов, причем со статичной средней частью страницы?
Всем привет. Возникла нетривиальная задача, лучше объясню на примере. Сверстал...

Как загрузить часть страницы?
Здравствуйте, возник очень интересный вопрос, как можно загружать часть...

Как загрузить в Memo код веб страницы??
Как загрузить в Memo код веб страницы?? Может для этого более хороши другие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru