2015-11-24 3 views
0

я пытаюсь получить данные с сайта, который имеет следующий вид: «http://www.mysite.here?pageNo=2»Синтаксического диапазон ССЫЛОК urllib2 или BeautifulSoup

Как получить HTML-данные из последовательного диапазона страниц с использованием urllib2 и/или BeautifulSoup? Этот код возвращает html только для первой страницы.

import urllib2 
from bs4 import BeautifulSoup 

for x in range(1,450): 
     numb = str(x) 
     url = "http://www.mysite.here?pageNo="+numb 
     page = urllib2.urlopen(url).read() 
     soup = BeautifulSoup(page, "html.parser") 

Print soup 

ответ

2

На каждой итерации вы создаете новую переменную с именем soup. Вам необходимо создать хранилище для всех страниц - list с pages. И присоединяйся к нему на каждой итерации.

import urllib2 
from bs4 import BeautifulSoup 


pages = [] 
for x in range(1, 450): 
    numb = str(x) 
    url = "http://www.mysite.here?pageNo=" + numb 
    page = urllib2.urlopen(url).read() 
    pages.append(BeautifulSoup(page, "html.parser")) 

print pages 
+0

Хм ... Я всегда пишу другой код внутри этого 'for' цикла, если я хочу сделать то же самое со всеми *' soup' * объектов: P –

+0

Спасибо, это работает! – Panoid

1

Вы можете создать массив soup = [] и добавить к нему с soup.append(soup).

Если вы хотите только один объект суп, вам нужно добавить содержимое на каждом шаге, например, для тела

soup = BeautifulSoup("<html><body></body></body>") # initialize soup 
for x in range(1,450): 
    numb = str(x) 
    url = "http://www.mysite.here?pageNo="+numb 
    page = urllib2.urlopen(url).read() 
    tmpsoup = BeautifulSoup(page, "html.parser") 
    for element in tmpsoup.body: 
     soup.body.append(element) 
Смежные вопросы