一致する電話番号を持つ会社名のリストを収集する 1 つのスパイダーを既に作成しています。これは、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
現時点では、リスト(phoneNumbers)を介してこれをループさせようとしていましたが、これまでのところそれを機能させることさえできていません。その方法がわかったら、自分でCSVファイルからプルできるようになります。現在の状態では、リスト内のインデックスが 1 の phoneNumber を使用しているだけです。