Я экономист без опыта программирования.Я пытаюсь научиться использовать Python, потому что мне сказали, что он очень мощный для анализа данных с веб-сайтов.На данный момент я застрял в следующем коде, и я был бы чрезвычайно признателен за любое предложение.
Прежде всего, я написал код для анализа данных из этой таблицы:
http://www.webifel.it/sifl/Tavola07.asp?comune=MILANO&cod_istat=15146
Код, который я написал, следующий:
#!/usr/bin/env python
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
import urllib2, os
def extract(soup):
table = soup.find("table", cellspacing=2)
for row in table.findAll('tr')[2:]:
col = row.findAll('td')
year = col[0].div.b.font.string
detrazione = col[1].div.b.font.string
ordinaria = col[2].div.b.font.string
principale = col[3].div.b.font.string
scopo = col[4].div.b.font.string
record = (year, detrazione, ordinaria, principale, scopo)
print >> outfile, "|".join(record)
outfile = open("milano.txt", "w")
br = Browser()
br.set_handle_robots(False)
url = "http://www.webifel.it/sifl/Tavola07.asp?comune=MILANO&cod_istat=15146"
page1 = br.open(url)
html1 = page1.read()
soup1 = BeautifulSoup(html1)
extract(soup1)
outfile.close()
Код читает таблицу, берет только необходимую информацию и создает текстовый файл.Код довольно прост, но он выполняет свою работу.
Моя проблема начинается сейчас.URL, который я разместил выше, является лишь одним из примерно 200, из которых мне нужно проанализировать данные.Все URL-адреса различаются только по двум элементам.Используя предыдущий URL:
http://www.webifel.it/sifl/Tavola07.asp?comune=MILANO&cod_istat=15146
, два элемента, которые однозначно идентифицируют эту страницу: MILANO (название города) и 15146 (бюрократический код).
Я хотел сначала создать файл с двумя столбцами:
- Во первых названия городов, которые мне нужны;
- Во вторых бюрократические коды.
Затем я хотел создать в python цикл, который будет читать каждую строку этого файла, корректно изменять URL в моем коде и выполнять задачу синтаксического анализа отдельно для каждого города.
Есть ли у вас какие-либо предложения о том, как поступить?Заранее благодарен за любую помощь и предложение!
[Обновление]
Спасибо всем за полезные предложения.Я нашел ответ Томаса К наиболее простым для реализации моих знаний по питону.У меня все еще есть проблемы.Я изменил код следующим образом:
#!/usr/bin/env python
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
import urllib2, os
import csv
def extract(soup):
table = soup.find("table", cellspacing=2)
for row in table.findAll('tr')[2:]:
col = row.findAll('td')
year = col[0].div.b.font.string
detrazione = col[1].div.b.font.string
ordinaria = col[2].div.b.font.string
principale = col[3].div.b.font.string
scopo = col[4].div.b.font.string
record = (year, detrazione, ordinaria, principale, scopo)
print >> outfile, "|".join(record)
citylist = csv.reader(open("citycodes.csv", "rU"), dialect = csv.excel)
for city in citylist:
outfile = open("%s.txt", "w") % city
br = Browser()
br.set_handle_robots(False)
url = "http://www.webifel.it/sifl/Tavola07.asp?comune=%s&cod_istat=%s" % city
page1 = br.open(url)
html1 = page1.read()
soup1 = BeautifulSoup(html1)
extract(soup1)
outfile.close()
где citycodes.csv в следующем формате
MILANO;12345
MODENA;67891
Я получаю следующую ошибку:
Traceback (most recent call last):
File "modena2.py", line 25, in <module>
outfile = open("%s.txt", "w") % city
TypeError: unsupported operand type(s) for %: 'file' and 'list'
Еще раз спасибо!