2016-03-29 22 views
-4

i Python için çok yeni ve ben bir web sitesinden veri kazıyın çalışıyorum, ama şimdiye kadar sahip olduğum, tüm sayfaları gerekir:kazıyın web siteleri

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) 

Bu kod, mevcut sayfadaki verileri yazdırır, tüm sayfalardan veri almayı ve bir dosyaya nasıl aktarmayı başarabilirim.

Saygılarımızla

+1

"Tüm sayfaları" tanımlayın. Yinelemeli olarak erişilebilen bağlantılar mı? (yani onları "wget ​​-r" ile alabilir misin?) Farklı URL'ler mi? Birbirine bağlanıyorlar mı? Normalde bağlantıları nasıl alırsın? OldSoup'ın çok tatlı olduğunu düşünüyorsun. Bir dosyaya yazmak için 'open' kullanabilirsiniz. – Kupiakos

+0

Yanıt için teşekkürler, URL'ler şu şekilde biçimlendirilir: "http://www.somesite.com/records/08-jan-2016/" "http://www.somesite.com/records/09- Ocak-2016/" " http://www.somesite.com/records/10-jan-2016/ " vs, bugüne kadar, her sayfanın sonunda önizlemeler ve sonraki tarih için bir düğme vardır. – user1385619

+0

Hangi tarihlerin geçerli olduğunu nasıl biliyorsunuz? Tüm tarihleri ​​varsa mı yoksa bir listen var mı? – Kupiakos

cevap

0

Şahsen, tarih aritmetik için datetime kütüphane kullanmak - bunu yapmak için tasarlanmış olan bu. Ancak, datetime 'un strftime yerel tabanlı olması nedeniyle, web sitesiyle eşleşen bir yerel ayarda çalışmayı düşünmüyorsanız, dizenin yapısını elle yapmak daha güvenlidir.

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

Yani birden çok tarih nasıl yinelendiğini yorum, büyüdü soruya ekleyin. Ben en yetkin programcı değilim, ama sözlükanahtar: değer =>ay oluşturmak: ayın gün sayısı. Daha sonra, url'ye eklenecek dizeler oluşturmak için yuvalanmış bir döngü oluşturabilirsiniz.

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) 
    ... 
İlgili konular