【发布时间】:2013-07-14 23:36:09
【问题描述】:
我已经创建了一个蜘蛛,它收集公司名称和匹配的电话号码的列表。然后将其保存到 CSV 文件中。
然后我想使用 CSV 文件中的电话号码作为 POST 数据从另一个站点抓取数据。我希望它遍历相同的起始 URL,但只是抓取每个电话号码产生的数据,直到 CSV 文件中没有更多的号码。
这是我目前得到的:
from scrapy.spider import BaseSpider
from scrapy.http import Request
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy import log
import sys
from scrapy.shell import inspect_response
from btw.items import BtwItem
import csv
class BtwSpider(BaseSpider):
name = "btw"
allowed_domains = ["siteToScrape.com"]
start_urls = ["http://www.siteToScrape.com/broadband/broadband_checker"]
def parse(self, response):
phoneNumbers = ['01253873647','01253776535','01142726749']
return [FormRequest.from_response(response,formdata={'broadband_checker[phone]': phoneNumbers[1]},callback=self.after_post)]
def after_post(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//div[@id="results"]')
items = []
for site in sites:
item = BtwItem()
fttcText = site.select("div[@class='content']/div[@id='btfttc']/ul/li/text()").extract()
# Now we will change the text to be a boolean value
if fttcText[0].count('not') > 0:
fttcEnabled=0
else:
fttcEnabled=1
item['fttcAvailable'] = fttcEnabled
items.append(item)
return items
目前我只是试图通过一个列表(电话号码)来循环,但到目前为止我什至还没有设法让它工作。一旦我知道该怎么做,我就可以自己从 CSV 文件中提取它。在当前状态下,它只是使用列表中索引为 1 的 phoneNumber。
【问题讨论】:
-
你能澄清一下这个问题吗?您可以使用
for p in phoneNumbers:在 Python 中循环遍历列表。但是,我怀疑这不是您要问的。 -
我能够运行上面的代码没有任何错误,那么什么不工作?
标签: python loops web-scraping screen-scraping scrapy