0

我正在使用 scrape.py 库来抓取网站。(图书馆和文档可以在这里找到http://zesty.ca/scrape/

我希望会话按下的页面上有一个按钮,但我不明白如何使用提交功能。据我了解,我应该给它一个表单的区域对象。按钮本身是一个输入 html 元素。我尝试同时给它表单和输入,但每次都得到相同的错误。

我的代码(在谷歌应用引擎上):

s.go(url)
form = s.doc.first(name="form1")
s.submit(region=form)

或者

s.go(url)
input = s.doc.first(tagname="input", id="blabla")
s.submit(region=input)

和错误:

ERROR    2011-05-01 23:37:18,673 __init__.py:427] sequence item 0: expected string, NoneType found
Traceback (most recent call last):
  File "\appengine\ext\webapp\__init__.py", line 636, in __call__
    handler.post(*groups)
  File "main.py", line 135, in post
    s.submit(region=form)
  File "scrape.py", line 342, in submit
    return self.go(url, p, redirects)
  File "scrape.py", line 288, in go
    self.cookiejar)
  File "scrape.py", line 176, in fetch
    data = urlencode(data)
  File "scrape.py", line 409, in urlencode
    for key, value in params.items()]
  File "scrape.py", line 405, in urlquote
    return ''.join(map(urlquoted.get, text))
TypeError: sequence item 0: expected string, NoneType found
4

2 回答 2

1

是的,我确实知道这已经一岁了,但是由于我目前正在使用 scrape.py 并且我知道这个问题的答案,所以我想我应该为后来的人添加它。

问题出在提交中。

它应该是 s.submit(form) 而不是 s.submit(region=form)。

原因是变量形式包含类似的东西,<Region 1254:1250>所以你不需要告诉 scrape.py 它在那里,它应该在那里。

所以它可能与Javascript无关。

于 2012-08-22T12:25:31.127 回答
0

我的假设是,这可能是因为按钮和表单都被 javascript 覆盖了,所以 scrape 可能无法使用它。需要支持 JS 的库,例如 selenium 或 windmill。

于 2011-05-08T22:21:38.793 回答