2017-09-11 18 views
0

私はこのHTMLテーブルをPython 3.6でBeautifulSoupでスクラップして、下のスクリプトのようにcsvにエクスポートしようとしています。私は前例を使用して、私の場合に合っていました。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' object has no attribute 'select'

それから私は、これで間違って何

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")]) 

でCSVファイルにエクスポートしようとするのでしょうか?何かばかげたエラーがあればごめんなさい、私はPythonの初心者です。

Ministero dell'InternoのWebサイトのスクレイピングに問題がありますすべての

答えて

1

ありがとうございます。のは、このコードを試してみましょう:

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 sua richiesta è stata bloccata dai sistemi posti a protezione del sito web.
Si prega di assicurarsi dell'integrità della postazione 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">があることに注意してください。私はあなたが2番目のものを必要とすると思います:

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

このようにして動作します。私がちょっとしたペタンティックに聞こえるのであれば、私はすみませますが、そのようなアプローチはデータライセンスに準拠していないのが怖いです。スクラップする前に確認してください。

+0

私はカスタムヘッダーを渡してみましたが、同じ応答があります。 'r = requests.get(url、headers = {' User-Agent ':' Mozilla/5.0(iPad; U; CPU OS Mac OS Xのような3_2_1; en-us)AppleWebKit/531.21.10(GeckoのようなKHTML)Mobile/7B405 '})' 残念ながら、データは他の場所では利用できないようです。 – Alejo

+0

@Alejoの回答が更新されました – floatingpurr

+0

ありがとうございます@floatingpurr!心配しないでください、あなたは丁寧になっています。法律上の注意によれば、データ操作に制約はないようだ。 – Alejo

関連する問題