Html表抓取并导出到csv:属性错误

时间:2017-09-11 10:35:13

标签: python html csv beautifulsoup

我正在尝试在Python 3.6上使用BeautifulSoup来抓取这个html表,以便将其导出到csv,如下面的脚本中所示。我使用了前一个例子,试图适应我的情况。

url = 'http://finanzalocale.interno.it/apps/floc.php/certificati/index/codice_ente/2050540010/cod/4/anno/2015/md/0/cod_modello/CCOU/tipo_modello/U/cod_quadro/03' 
html =urlopen(url).read 
soup = BeautifulSoup(html(), "lxml") 
table = soup.select_one("table.tabfin") 
headers = [th.text("iso-8859-1") for th in table.select("tr th")]

但我收到了一个AttributeError。

  

AttributeError:'NoneType'对象没有属性'select'

然后我会尝试用

导出到csv
with open("abano_spese.csv", "w") as f:
    wr = csv.writer(f)
    wr.writerow(headers)
    wr.writerows([[td.text.encode("iso-8859-1") for td in row.find_all("td")] for row in table.select("tr + tr")])

这有什么问题?对不起,如果有一些愚蠢的错误,我是python的绝对初学者。

谢谢大家

1 个答案:

答案 0 :(得分:1)

抓取 Ministero dell'Interno 的网站时出现问题。我们试试这段代码:

url = 'http://finanzalocale.interno.it/apps/floc.php/certificati/index/codice_ente/2050540010/cod/4/anno/2015/md/0/cod_modello/CCOU/tipo_modello/U/cod_quadro/03'

html = urlopen(url).read()
soup = BeautifulSoup(html)
print soup.prettify()

你得到:

          La suarichiestaèstatabloccata dai sistemi posti a protezione del sito web。        
        Si prega diassicurarsidell'integritàdellapostazione utilizzata e riprovare。               

刮痧似乎不受欢迎,或者他们认为您的请求中存在令人讨厌的内容,这就是为什么代码中table = None会得到AttributeError

的原因

可能的解决方案:

**在开始其他任何事情之前,请检查 Ministero dell'Interno 的数据政策是否允许脚本使用他们的数据,否则这不是获得所需内容的方式。**

第2步:您可以尝试将自定义标头传递给您的请求以充当浏览器。如,

headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)"}
r  = requests.get(url, headers = headers)
soup = BeautifulSoup(r.text, 'lxml')

现在你有了soup。请注意,页面中有3个不同的<table class="tabfin">。我想你需要第二个:

table = soup.select("table.tabfin")[1]

通过这种方式,它有效。对不起,如果我听起来有点迂腐,但我担心这种方法应该不符合他们的数据许可证。请在刮之前检查一下。