0

ScraperWiki でこのスクレーパーに行き詰まっています。dir='ltr' の ul の li 要素からのテキストが欲しいだけです。このスクリプトを毎週実行すると、まったく新しい文章でありながら、文章が互いに類似している可能性があります。そのため、データに日付を含めたいのです。

import scraperwiki
from mechanize import Browser
import lxml.html
from datetime import date, timedelta, datetime
from scraperwiki import sqlite

datum = date.today()
print datum

url = 'http://www.knvb.nl/nieuws/excessenav/actueel'
mech = Browser()
page = mech.open(url)
tree = lxml.html.fromstring(page.read())

# print tree.xpath('//ul[@dir="ltr"]/li') # access li elements
# print tree.xpath('//ul[@dir="ltr"]/li/text()') # access text in li elements

uitspraak = tree.xpath("//ul[@dir='ltr']/li/text()")
print uitspraak

# Saving data:
unique_keys = [ 'datum', 'uitspraak' ]
data = { 'datum':datum, 'uitspraak':uitspraak  }
scraperwiki.sql.save(unique_keys, data)

次のエラーが表示されます。

Traceback (most recent call last):
  File "./code/scraper", line 28, in <module>
    scraperwiki.sql.save(unique_keys, data)
  File "/usr/local/lib/python2.7/dist-packages/scraperwiki/sqlite.py", line 34, in save
    return dt.upsert(data, table_name = table_name)
  File "/usr/local/lib/python2.7/dist-packages/dumptruck/dumptruck.py", line 301, in upsert
    self.insert(upsert=True, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/dumptruck/dumptruck.py", line 284, in insert
    self.execute(sql, values, commit=False)
  File "/usr/local/lib/python2.7/dist-packages/dumptruck/dumptruck.py", line 138, in execute
    raise self.sqlite3.InterfaceError(unicode(msg) + '\nTry converting types or pickling.')
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
Try converting types or pickling.

このスクレーパーにデータを保存させるにはどうすればよいですか?

4

1 に答える 1

2

これにより結果のリストが得られ、そのリストがサポートされていない型エラーの原因です。

tree.xpath("//ul[@dir='ltr']/li/text()")

代わりに、各結果を保存する必要があります。

unique_keys = ['datum', 'uitspraak']
for x in uitspraak:
  data = {'datum': datum, 'uitspraak': x}
  scraperwiki.sql.save(unique_keys, data)

複数の結果を保存するためのより良い方法があるかもしれません – 私は以前にスクレイパーウィキを使用したことがなく、API も知りません.

于 2013-11-06T11:09:51.040 に答える