2016-03-29 2 views
-4

Я очень новичок в Python, и я пытаюсь Скрип данные с веб-сайта, но мне нужно все страницы, до сих пор у меня есть:скоблить Сайты с Python + Beautiful Soup 4 Все страницы

import requests 
from bs4 import BeautifulSoup 


r = requests.get ("http://www.somesite.com/records/08-jan-2016/") 
r.content 
soup = BeautifulSoup(r.content, "html.parser") 
full_info = soup.find_all("div", {"class": "col-sm-10"}) 

for item in full_info : print (item.text) 

Этот код печатает данные с текущей страницы, как я могу управлять данными со всех страниц и экспортироваться в файл.

С наилучшими пожеланиями

+1

Определить «все страницы». Являются ли эти ссылки доступными рекурсивно? (т. е. вы могли бы получить их с помощью wget -r). Они разные URL-адреса? Связаны ли они друг с другом? Как вы обычно получаете ссылки? Кажется, у вас красивый BeautifulSoup. Вы можете просто использовать 'open' для записи в файл. – Kupiakos

+0

Спасибо за ответ, url's отформатированы как даты: "http://www.somesite.com/records/08-jan-2016/" "http://www.somesite.com/records/09- jan-2016/" " http://www.somesite.com/records/10-jan-2016/ " и т. д., до сегодняшнего дня, в конце каждой страницы есть кнопка для предварительного просмотра и следующей даты. – user1385619

+0

Откуда вы знаете, какие даты действительны? Вы просто собираетесь принять все даты или у вас есть список? – Kupiakos

ответ

0

Лично я хотел бы использовать datetime библиотеку для арифметики дат - это то, что он предназначен. Однако, поскольку datetime - strftime - это основанный на локали, безопаснее выполнять построение строки вручную, если только вы не намереваетесь запустить это в известной локали, соответствующей веб-сайту.

import datetime 
MONTH_NAMES = {1: 'jan', 2: 'feb', 3: 'mar'} # and so on 
ONE_DAY = datetime.timedelta(1) 

def date_strings(first_date, last_date): 
    current_date = first_date 
    while current_date <= last_date: 
     yield '{0.day:02}-{1}-{0.year:04}'.format(
      current_date, MONTH_NAMES[current_date.month]) 
     # If running on a US locale, you can just use: 
     # yield current_date.strftime('%d-%b-%Y').lower() 
     current_date += ONE_DAY 

first_date = datetime.date(2016, 1, 8) 
last_date = datetime.date(2016, 3, 29) 

for date_string in date_strings(first_date, last_date): 
    print(date_string) 
    # Do whatever scraping you need using date_string 
0

Так, чтобы добавить к вопросу, поднятому в комментариях, как перебираются через несколько дат. Я не самый опытный программист, но я бы создал словарь с ключом : значение =>месяц: количество дней в месяц. Затем вы можете создать вложенный цикл для создания строк для добавления к URL-адресу.

dates = {"jan":31, "feb":29, "mar":31} 
for month in dates: 
    for day in range(dates[month]): 
    url = "https://www.somepage.com/{0}-{1}-2016".format(str(day+1), month) 
    req = requests.get(url) 
    ...