我是一名没有编程背景的经济学家。我正在尝试学习如何使用 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()
代码读取表格,只获取我需要的信息并创建一个 txt 文件。代码非常简陋,但它完成了这项工作。
我的问题现在开始。我在上面发布的网址只是我需要从中解析数据的大约 200 个网址之一。所有 url 仅由两个元素区分。使用以前的网址:
http://www.webifel.it/sifl/Tavola07.asp?comune=MILANO&cod_istat=15146
唯一标识此页面的两个元素是 MILANO(城市名称)和 15146(官僚代码)。
我想做的是,首先,创建一个包含两列的文件:
- 首先是我需要的城市名称;
- 在第二个官僚代码。
然后,我想在 python 中创建一个循环来读取该文件的每一行,正确修改我的代码中的 url 并为每个城市分别执行解析任务。
你对如何进行有什么建议吗?提前感谢您的任何帮助和建议!
[更新]
感谢大家的有用建议。根据我对 python 的了解,我发现 Thomas K 的答案最容易实现。不过,我仍然有问题。我通过以下方式修改了代码:
#!/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'
再次感谢!