使用约束在Scrapy中生成start_urls列表

时间:2013-09-26 12:51:54

标签: python-2.7 scrapy

我需要使用Scrapy(来自房地产经纪人的广告)解析下面的网址

http://ws.seloger.com/search.xml?idq=?&cp=72&idqfix=1&pxmin=30000&pxmax=60000&idtt=2&SEARCHpg=1&getDtCreationMax=1&tri=d_dt_crea

无论您在网址中使用的最低/最高价格,服务器的响应都限制为200个结果(请参阅网址中的pxmin / pxman)。

因此,我想使用一个函数为start_urls生成具有合适价格区间的网址,因此它不会超过200个搜索结果,因此网址覆盖了[0:1000000]

该功能将执行以下操作:

  • 获取第一个网址
  • 检查结果数量(XML响应中的“nbTrouvees”标记)
  • 如果结果>调整价格区间如果< 200或添加到start_urls列表200
  • 该功能增加价格区间,直至达到1,000,000的价格。
  • 函数返回最终的start_urls列表,它将涵盖给定区域的所有属性。

这显然意味着向服务器发出大量请求以找出合适的价格范围以及Spider为最终抓取所产生的所有请求。

1)因此,我的第一个问题是:在你看来,是否有更好的方法来解决这个问题?

2)我的第二个问题:我试图用Scrapy检索其中一个页面的内容,只是为了看看我如何在不使用蜘蛛的情况下解析“nbTrouvees”标签但是我被卡住了。

我尝试使用TextResponse方法,但没有得到任何回报。然后我尝试了下面但它失败了,因为“响应”对象的“body to unicode”方法不存在。

>>>link = 'http://ws.seloger.com/search.xml?   idq=1244,1290,1247&ci=830137&idqfix=1&pxmin=30000&pxmax=60000&idtt=2&SEARCHpg=1&getDtCreationMax=1&tri=d_dt_crea'

>>>xxs = XmlXPathSelector(Response(link))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/Gilles/workspace/Immo-Lab/lib/python2.7/site-         packages/scrapy/selector/lxmlsel.py", line 31, in __init__
    _root = LxmlDocument(response, self._parser)
  File "/Users/Gilles/workspace/Immo-Lab/lib/python2.7/site-    packages/scrapy/selector/lxmldocument.py", line 27, in __new__
    cache[parser] = _factory(response, parser)
  File "/Users/Gilles/workspace/Immo-Lab/lib/python2.7/site-    packages/scrapy/selector/lxmldocument.py", line 13, in _factory
    body = response.body_as_unicode().strip().encode('utf8') or '<html/>'
AttributeError: 'Response' object has no attribute 'body_as_unicode'

有什么想法吗? (fyi,它适用于我的蜘蛛)

谢谢 吉勒

0 个答案:

没有答案