2017-07-19 4 views
0

私はこのスパイダーをeBay用にするためにフリーランサーを雇いました。私はただPythonを学んでいるので、それが速く必要なので、私たちの解決策でした。私は彼に問題の原因を突き止めるように頼んだが、彼は試みたが、彼はこの問題が何であるかを知らない。彼は自分のコンピュータで正常に動作すると言いますが、私が試したすべてのものでクラッシュします。私はUbuntuとWindowsを使いました。異なるコンピュータとインターネットのある場所。約500〜600件の治療プログラムが終了しました。

これはpython 2.7の周りに構築され、私は最新のバージョンのscrapy、selenium、およびbs4を持っていることを確認しました。

私はeBay用のスパイダースパイダーを実行しています。私はそれを実行すると、それは約500から600アイテムを取得し、その後、スパイダーを閉じます。

プログラムはページを解析してデータを抽出し、問題なくCSVファイルに保存します。それは1ページから次のものへとうまくいくだけです。時には

それは次のように終了します:それはちょうど近くにこのようなない理由を与えるだろう

2017-07-19 15:27:21 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up 
retrying <GET ***link***> (failed 3 times): [<twisted.python.failure.Failure 
twisted.internet.error.ConnectionLost: Connection to the other side was lost 
in a non-clean fashion: Connection lost.>] 

2017-07-19 15:27:21 [scrapy.core.scraper] ERROR: Error downloading <GET ***link***>: [<twisted.python.failure.Failure twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion: Connection lost.>] 

その他の回:

2017-07-19 13:20:01 [scrapy.core.engine] INFO: Closing spider (finished) 

私はそれが50,000の部品があります与える開始リンクそれは約500を停止しているので、それは少し短いです。ここで

は、コードの一部です:

import scrapy,time 
from urlparse import urljoin 
from selenium import webdriver 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
from bs4 import BeautifulSoup 
from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.support.ui import Select 
from ebay.items import EbayItem 
url = raw_input("ENTER THE URL TO SCRAPE : ") 
co = 1 
ch = 1 

class EbayspiderSpider(scrapy.Spider): 
name = "ebayspider" 
#start_urls = ['http://www.ebay.com/sch/hfinney/m.html? 
item=132127244893&rt=nc&_trksid=p2047675.l2562'] 
start_urls = [str(url)] 


def __init__(self): 
    self.driver = webdriver.Chrome() 

def __del__(self): 
    self.driver.quit() 


def parse(self, response): 
    global ch, co 

    try: 
     if ch > 5: 
      self.driver.quit() 
      self.driver = webdriver.Chrome() 
      ch = 1 
      co = 1 

     for attr in response.xpath('//*[@id="ListViewInner"]/li'): 
      item = EbayItem() 
      linkse = '.vip ::attr(href)' 
      link = attr.css('a.vip ::attr(href)').extract_first() 
      yield scrapy.Request(urljoin(response.url, link), callback=self.parse_link, meta={'item': item}) 
     next_page = '.gspr.next ::attr(href)' 
     next_page = response.css(next_page).extract_first() 
     if next_page: 
      ch+=1 
      yield scrapy.Request(urljoin(response.url, next_page), callback=self.parse) 

    except: 

     if ch > 5: 
      self.driver.quit() 
      self.driver = webdriver.Chrome() 
      ch = 1 
      co = 1 


     SET_SELECTOR = '.li.nol' 
     for attr in response.css(SET_SELECTOR): 
      item = EbayItem() 
      linkse = '.v4lnk ::attr(href)' 
      link = attr.css(linkse).extract_first() 
      yield scrapy.Request(urljoin(response.url, link), callback=self.parse_link, meta={'item': item}) 

     next_page = 'td.next a ::attr(href)' 
     next_page = response.css(next_page).extract_first() 
     if next_page: 
      ch+=1 
      yield scrapy.Request(urljoin(response.url, next_page), callback=self.parse) 

この問題上の任意のアイデアは歓迎され、私は何をしようとします。

スパイダーが閉じて、途中から再オープンする方法はありますか?

私はPythonには最適ではありませんが、私はこれを理解しようと多くのことを学んできました。

ありがとうございました!時にはそれが働いていたし、すべてのアイテムをつかんで、時にはそれがエラーなしで途中で停止 -

+0

からその情報を得ることができると思います。しかし、それを解決する適切な方法を見つけられませんでした。私はちょうどSeleniumが壊れやすいものだと感じています...開発中にPC上でうまくいったので、パフォーマンス問題が疑わしいですが、Scrapydインスタンスに展開して同時に他のスパイダーと一緒に実行すると失敗します。古いWebKitのサポートがあったので、私はSplashを使用できませんでした。今Splash 3.0を使用して私はSplashをもう一度使ってみてください –

+0

あなたのスパイダーはもともとあなたのスパイダーがPython 2.7で書かれていましたが、3.0+に移行して問題を修正しましたか? –

+0

私はPython 2.7でスパイダーを開発しています。私はSplashのバージョンを指していました。以前のバージョンのSplash(古いQT/WebKitインプレッションを使用)でレンダリングできなかったため、1つのスパイダーでSeleniumを使用しました。私は書きましたが、いつか成功することは時々ありませんでした。 Splashドッカーの画像が更新されたら、SeleniumからSplashに戻ってきてくれました。 –

答えて

0

私はまた、セレンを試して、あなたがそうであるように同じ問題を経験したあなたはeBayのAPIを

+0

IPアドレスを変更するVPNは解決策ですか?または、他の何か? –

+0

APIキーに要求の制限があるため、VPNが助けになりません。その場合、プロキシ/ VPN +複数のAPIが必要です – user3412846

+0

これを試してみます –

関連する問題