2017-08-17 22 views
0

我一直在努力刮this網站使用硒和scrapy。我想讓我的代碼點擊每個公司的鏈接,然後提取並循環這個過程。但我不知道如何從一個公司鏈接到另一個公司鏈接。Scrapy&Selenium:如何循環XPATH和預成型點擊

任何幫助,將不勝感激。

from scrapy.http import TextResponse 
from selenium import webdriver 
import scrapy 
import time 


class ExampleSpider(scrapy.Spider): 
    name = 'comp' 
    allowed_domains = ['site'] 
    start_urls = ["site"] 

    def __init__(self, **kwargs): 
     super(ExampleSpider, self).__init__(**kwargs) 
     self.driver = webdriver.Firefox() 

    def parse(self, response): 
     self.driver.get(response.url) 
     self.driver.implicitly_wait(10) 
     index = 0 
     while True: 
      companies = self.driver.find_elements_by_xpath('//*[@id="company-list"]/ul/li') 
      try: 
       companies[index].click() 
       time.sleep(6) 
      except IndexError: 
       break 
      resp = TextResponse(url=self.driver.current_url, body=self.driver.page_source, encoding='utf-8') 
      for com in resp.xpath('body'): 
       yield \ 
        { 
       # DO Something 
        } 

       self.driver.back() 
       index += 1 
      self.driver.quit() 

它從第一個鏈接提取只有它停止。請幫幫我。

+0

你堅持使用硒?這個頁面似乎正在使用API​​--嘗試查看瀏覽器的XHR請求的開發人員工具。 –

回答

0

正如已經建議,儘量使用自己的API,你不會有網頁渲染打擾,點擊元素等展望在開發工具XHR請求,你可以看到:

  1. 爲了得到企業名單,請致電https://www.investiere.ch/proxy/api2/v1/companies?extra%5Bimagecache%5D=company_logo_70&fields=companyType,lifecycle&page=0&parameters%5Binclude_skipped%5D=yes。點擊加載更多...只是調整URL中的page參數。
  2. 從上面的結果中,您可以通過以下鏈接獲取公司詳細信息:records[X].uri,例如對於第一家公司CombaGroup它的https://www.investiere.ch/api2/v1/companies/10211
  3. 要獲取人員列表(例如經理),請點擊鏈接https://www.investiere.ch/proxy/api2/v1/companies/10211/people
1

主要問題是因爲在while循環中有 driver.quit()。把它從循環中拿出來。

而且喜歡使用精確的XPath,如果你正在使用它來提取如下COPANY名,

//*[@id="company-list"]/ul/li/div[2]/h4 
+0

我將driver.quit()從循環中取出,但它並未解決問題,我不僅要取消公司名稱,還要取消其網站和董事會顧問。 – haben

+0

現在有什麼問題,它仍然只運行一次或給出一些錯誤? –

+0

是的,它仍然只運行一次。 – haben