2012-04-19 2 views
-3

Последний вопрос за этот день. Я пытаюсь найти способ разобрать содержимое таблиц этой страницы: http://www7.pearsonvue.com/Dispatcher?application=VTCLocator&action=actStartApp&v=W2L&cid=445 в var, чтобы поместить его в файл Excel.Проанализируйте содержимое таблицы HTML - Но iframe является источником проблем

Нет проблем с помещением данных в excel после разбора его с помощью BeautifulSoup.

Но (всегда есть «но») исходный код довольно странный, с внутренним iframe.

#!/usr/bin/python 
# -- coding: utf-8 -- 

import xlwt 
import urllib2 
import sys 
import re 
from bs4 import BeautifulSoup as soup 
import urllib 

print("TEST FOR PTE TESTS CENTERS") 

url = 'http://www6.pearsonvue.com/Dispatcher?application=VTCLocator&action=actStartApp&v=W2L&cid=445' 
values = { 
     'sortColumn' : 2, 
     'sortDirection' : 1, 
     'distanceUnits' : 0, 
     'proximitySearchLimit' : 20, 
     'countryCode' : 'GBR', # WE TRY FOR NOW WITH A SPECIFIC COUNTRY 

      } 

user_agent = 'Mozilla/5 (Solaris 10) Gecko' 
headers = { 'User-Agent' : user_agent } 

data = urllib.urlencode(values) 
req = urllib2.Request(url, data, headers) 
response = urllib2.urlopen(req) 
thePage = response.read() 
the_page = soup(thePage) 


result = the_page.find('frame', attrs={'name' : 'VTCLocatorPageFrame'}) 
print result # We have now the FRAME link in the result var 

Поэтому, пожалуйста, найдите источник сценария, который я пытаюсь получить.

После запуска сценария, мы имеем это в результате вар:

Если у вас есть какие-либо идеи, это может быть очень полезно :)

Спасибо заранее и с помощью питона!

+1

Это не совсем понятно, что вы просите ... –

+1

Так извините. Если вы перейдете на страницу, вы увидите, сделав выбор в списке, вы получите доступ к таблице с именами центров тестирования, стран и стран. Я хочу найти способ разобрать эти данные :-) –

ответ

0

Извините за вопрос, который был не очень ясен. Я пытался найти решение, и вот сценарий я использую:

#!/usr/bin/python 
# -- coding: utf-8 -- 

import xlwt 
import urllib2 
import sys 
import re 
from bs4 import BeautifulSoup as soup 
import urllib 
liste_countries = ['USA','AFG','ALA','ALB','DZA','ASM','AND','AGO','AIA','ATA','ATG','ARG','ARM','ABW','AUS','AUT','AZE','BHS','BHR','BGD','BRB','BLR','BEL','BLZ','BEN','BMU','BTN','BOL','BES','BIH','BWA','BVT','BRA','IOT','BRN','BGR','BFA','BDI','BDI','KHM','CMR','CAN','CPV','CYM','CAF','TCD','CHL','CHN','CXR','CCK','COL','COM','COG','COD','COK','CRI','CIV','HRV','CUW','CYP','CZE','DNK','DJI','DMA','DOM','ECU','EGY','SLV','GNQ','ERI','EST','ETH','FLK','FRO','FJI','FIN','FRA','GUF','PYF','ATF','GAB','GMB','GEO','DEU','GHA','GIB','GRC','GRL','GRD','GLP','GUM','GTM','GGY','GIN','GNB','GUY','HTI','HMD','HND','HKG','HUN','ISL','IND','IDN','IRN','IRQ','IRL','IMN','ISR','ITA','JAM','JPN','JEY','JOR','KAZ','KEN','KIR','PRK','KOR','KWT','KGZ','LAO','LVA','LBN','LSO','LBR','LBY','LIE','LTU','LUX','MAC','MKD','MDG','MWI','MYS','MDV','MLI','MLT','MHL','MTQ','MRT','MUS','MYT','MEX','FSM','MDA','MCO','MNG','MNE','MSR','MAR','MOZ','MMR','NAM','NRU','NPL','NLD','NCL','NZL','NIC','NER','NGA','NIU','NFK','MNP','NOR','OMN','PAK','PLW','PSE','PAN','PNG','PRY','PER','PHL','PCN','POL','PRT','PRI','QAT','REU','ROU','RUS','RWA','BLM','KNA','LCA','MAF','WSM','SMR','STP','SAU','SEN','SRB','SYC','SLE','SGP','SXM','SVK','SVN','SLB','SOM','ZAF','SGS','SSD','ESP','LKA','SHN','SPM','VCT','SDN','SUR','SJM','SWZ','SWE','CHE','TWN','TJK','TZA','THA','TLS','TKL','TON','TTO','TUN','TUR','TKM','TCA','TUV','UGA','UKR','ARE','GBR','URY','UMI','UZB','VUT','VAT','VEN','VNM','VGB','VIR','WLF','ESH','YEM','ZMB','ZWE'] 


name_doc_out = raw_input("What do you want for name for the Excel output document ? >>> ") 
wb = xlwt.Workbook(encoding='utf-8') 
ws = wb.add_sheet("PTE_TC") 
x = 0 
y = 0 
numero = 0 
total = len(liste_countries) 
total_city = len(villes_us) 
number_city = 0 
for liste in liste_countries: 
      if 0 == 1: 
         print("THIS IF IS JUST FOR TEST") 
      else: 
         print("Fetching country number %s on %s" % (numero, total)) 
         numero = numero + 1 
         url = 'http://www6.pearsonvue.com/Dispatcher?v=W2L&application=VTCLocator&HasXSes=Y&layerPath=ROOT.VTCLocator.SelTestCenterPage&wscid=199372577&layer=SelTestCenterPage&action=actDisplay&bfp=top.VTCLocatorPageFrame&bfpapp=top&wsid=1334887910891' 
         values = { 
           'sortColumn' : 2, 
           'sortDirection' : 1, 
           'distanceUnits' : 0, 
           'proximitySearchLimit' : 20, 
           'countryCode' : liste, 

            } 

         user_agent = 'Mozilla/5 (Solaris 10) Gecko' 
         headers = { 'User-Agent' : user_agent } 

         data = urllib.urlencode(values) 
         req = urllib2.Request(url, data, headers) 
         response = urllib2.urlopen(req) 
         thePage = response.read() 
         the_page = soup(thePage) 

         #print the_page 
         tableau = the_page.find('table', attrs={'id' : 'apptable'}) 
         print tableau 
         try: 
            rows = tableau.findAll('tr') 
            for tr in rows: 
               cols = tr.findAll('td') 
               # del/remove les td qui faut pas 
               y = 0 
               x = x + 1 
               for td in cols: 
                  print td.text 
                  ws.write(x,y,td.text.strip()) 
                  wb.save("%s.xls" % name_doc_out) 
                  y = y + 1 
         except (IndexError, AttributeError): 
            pass 

Я думаю, что проблема приходит из URL я использую. Я предполагаю, что идентификатор меняется от по запросу на другой ... http://www6.pearsonvue.com/Dispatcher?v=W2L & применение = VTCLocator & HasXSes = Y & layerPath = ROOT.VTCLocator.SelTestCenterPage & wscid = 199372577 & слой = SelTestCenterPage & действие = actDisplay & BFP = top.VTCLocatorPageFrame & bfpapp = верхний & WSID = 1334887910891

Он работал отлично в течение часа, а теперь не больше! :-)

0

если вы должны фильтровать/разборе IFRAME, код здесь ...

from bs4 import BeautifulSoup 
import urllib2 

page = urllib2.urlopen("put_ur_url") 
soup = BeautifulSoup(page) 
    for link in soup.findAll('iframe'): 
     if link['src'].startswith('start_of_path'): 
      print(link) 
Смежные вопросы