2013-09-23 5 views
0

У меня есть тысячи html-файлов, хранящихся в удаленном каталоге. Все эти файлы имеют одну и ту же структуру HTML. Прямо сейчас я соскабливаю каждый файл со следующим сценариемScrape html файлы, хранящиеся в удаленном каталоге

from string import punctuation, whitespace 
import urllib2 
import datetime 
import re 
from bs4 import BeautifulSoup as Soup 
import csv 
today = datetime.date.today() 
html = urllib2.urlopen("http://hostname/coimbatore/3BHK_flats_inCoimbatore.html_%94201308110608%94.html").read() 

soup = Soup(html) 
for li in soup.findAll('li', attrs={'class':'g'}): 
    sLink = li.find('a') 
    print sLink['href'] 
    sSpan = li.find('span', attrs={'class':'st'}) 
    print sSpan 

Таким образом, приведенный выше сценарий предназначен для одного URL-адреса. Как и я, я хочу очистить все html-файлы, которые находятся в этом каталоге, независимо от имен файлов. Я не считаю, что этот вопрос задан.

Update: Код

import urllib2 
import BeautifulSoup 
import re 

Newlines = re.compile(r'[\r\n]\s+') 

def getPageText(url): 
    # given a url, get page content 
data = urllib2.urlopen(url).read() 
    # parse as html structured document 
bs = BeautifulSoup.BeautifulSoup(data, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES) 
    # kill javascript content 
for li in bs.findAll('li', attrs={'class':'g'}): 
    sLink = li.find('a') 
    print sLink['href'] 
    sSpan = li.find('span', attrs={'class':'st'}) 
    print sSpan 
def main(): 
    urls = [ 
     'http://192.168.1.200/coimbatore/3BHK_flats_inCoimbatore.html_%94201308110608%94.html', 
     'http://192.168.1.200/coimbatore/3BHK_flats_inCoimbatore.html_%94201308110608%94.html.html' 
    ] 
    txt = [getPageText(url) for url in urls] 

if __name__=="__main__": 
    main()  
+1

Получить список файлов в каталоге, сделать процесс для каждого из них. –

ответ

1

Использование цикла:

... 

for url in url_list: 
    html = urllib2.urlopen(url).read() 

    soup = Soup(html) 
    for li in soup.findAll('li', attrs={'class':'g'}): 
     sLink = li.find('a') 
     print sLink['href'] 
     sSpan = li.find('span', attrs={'class':'st'}) 
     print sSpan 

Если вы не знаете, список URL-адресов заранее, вы должны проанализировать листинг страницы.


import csv 
import urllib2 

import BeautifulSoup 


def getPageText(url, filename): 
    data = urllib2.urlopen(url).read() 
    bs = BeautifulSoup.BeautifulSoup(data, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES) 
    with open(filename, 'w') as f: 
     writer = csv.writer(f) 
     for li in bs.findAll('li', attrs={'class':'g'}): 
      sLink = li.find('a') 
      sSpan = li.find('span', attrs={'class':'st'}) 
      writer.writerow([sLink['href'], sSpan]) 

def main(): 
    urls = [ 
     'http://192.168.1.200/coimbatore/3BHK_flats_inCoimbatore.html_%94201308110608%94.html', 
     'http://192.168.1.200/coimbatore/3BHK_flats_inCoimbatore.html_%94201308110608%94.html.html', 
    ] 
    for i, url in enumerate(urls, 1): 
     getPageText(url, '{}.csv'.format(i)) 

if __name__=="__main__": 
    main()  
+0

Черт возьми, ты быстро. Большой ответ bro :) –

+0

@falsetru. Теперь, как это сделать, список URL? Должен ли я хранить все URL-адреса в файле? пропустите его, как следующие: urls = [ 'http://www.stackoverflow.com/questions/5331266/python-easiest-way-to-scrape-text-from-list-of-urls-using-beautifulsoup' , 'http://stackoverflow.com/questions/5330248/how-to-rewrite-a-recursive-function-to-use-a-loop-instead' ] '? –

+0

@Venky, не зная шаблон url или структуру страницы списка, я не могу ответить. – falsetru

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