2013-08-17 36 views
1

我是一名蟒蛇新手,並且嘗試學習一些python並主要用它來抓它。我設法做了一些簡單的刮板,但現在我正在研究更高級的腳本。使用Python/scrapy進行網頁瀏覽(這段代碼是否工作)

用csv文件,我有我試着讀col和列中的每個值im即將發佈此值在webform中的每個值。

我在這裏找到了一個腳本,但是我不能讓它爲我刮這些東西,因爲我不明白所有這些即時通訊有麻煩讓我的主要工具也能正常工作。

蜘蛛抓取,但它與飼料出口返回的僅僅是一個「[」

這裏是舊的線程Click

這裏是蜘蛛的代碼。

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文件SOM例如數字

01253873647 
01253776535 
01142726749 
+0

一些評論/問題:「[」檢索?你的'start_requests'對我來說似乎毫無用處,因爲你在那裏什麼都不做。你爲什麼不用'start_requests'函數替換'parse_main_page'?畢竟這是你真正開始工作的地方,你不需要先連接到網站然後回調這個功能。你確定你在'after_post'函數中抓取的頁面是正確的嗎?你應該在'after_post'的開頭插入一個pdb(http://docs.python.org/2/library/pdb.html),看看你真正解析了什麼。你的最終xpath可以縮短! – Robin

回答

0

在這裏看到的信息上獲得API訪問權限: http://www.samknows.com/dataoutput

在任何情況下,這可能讓你開始:

import requests 
from BeautifulSoup import BeautifulSoup 

url = 'http://www.samknows.com/broadband/broadband_checker' 
num = '01253873647' 

data = {'broadband_checker[phone]': num, 
     'broadband_checker[postcode]': '',} 

s = BeautifulSoup((requests.post(url, data=data)).text) 
s.find('div', attrs={'id':'summary'}).prettify() 
+0

我本來可以使用這個API,但是因爲我試圖學習這種刮擦方法,而且我的項目並不是真的關於samknows.com,我真的很想知道爲什麼我無法獲得我的上述內容來刮取任何數據。但是,感謝您花時間。 – user2692768

0

您的蜘蛛代碼不工作的原因克是因爲你的縮進不正確。我編輯了您的問題以正確縮進代碼,假定縮進錯誤是複製粘貼問題。請完整複製上面更新的代碼,並且蜘蛛將工作。