我是一个 python 新手和一个试图学习一些 python 并且主要是用它来刮的新手。我已经设法做了一些简单的刮板,但现在我正在研究一个更高级的脚本。
使用 csv 文件,我尝试按 col 读取该 col,并且对于列中的每个值,我将在 webform 中发布该值。
我在 stackoverflow 上找到了一个脚本,它完全可以做到这一点,但我无法让它为我刮掉任何东西,因为我不明白这一切,我也无法让我的主蜘蛛正常工作。
蜘蛛爬行,但它返回的提要导出的唯一内容是一个“[”
这是较旧的线程单击
这是蜘蛛的代码。
import csv
from scrapy.item import Item, Field
from scrapy.spider import BaseSpider
from scrapy.http import Request
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
class BtwItem(Item):
fttcAvailable = Field()
phoneNumber = Field()
class BtwSpider(BaseSpider):
name = "btw"
allowed_domains = ["samknows.com"]
def start_requests(self):
yield Request("http://www.samknows.com/broadband/broadband_checker", self.parse_main_page)
def parse_main_page(self, response):
with open('phones.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
phone_number = row[0]
yield FormRequest.from_response(response,
formdata={'broadband_checker[phone]': phone_number},
callback=self.after_post,
meta={'phone_number': phone_number})
def after_post(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//div[@id="results"]')
phone_number = response.meta['phone_number']
for site in sites:
item = BtwItem()
fttc = site.select("div[@class='content']/div[@id='btfttc']/ul/li/text()").extract()
item['phoneNumber'] = phone_number
item['fttcAvailable'] = 'not' in fttc[0]
yield item
这是phones.csv文件中的一些示例数字
01253873647
01253776535
01142726749