私はこのスパイダーを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には最適ではありませんが、私はこれを理解しようと多くのことを学んできました。
ありがとうございました!時にはそれが働いていたし、すべてのアイテムをつかんで、時にはそれがエラーなしで途中で停止 -
からその情報を得ることができると思います。しかし、それを解決する適切な方法を見つけられませんでした。私はちょうどSeleniumが壊れやすいものだと感じています...開発中にPC上でうまくいったので、パフォーマンス問題が疑わしいですが、Scrapydインスタンスに展開して同時に他のスパイダーと一緒に実行すると失敗します。古いWebKitのサポートがあったので、私はSplashを使用できませんでした。今Splash 3.0を使用して私はSplashをもう一度使ってみてください –
あなたのスパイダーはもともとあなたのスパイダーがPython 2.7で書かれていましたが、3.0+に移行して問題を修正しましたか? –
私はPython 2.7でスパイダーを開発しています。私はSplashのバージョンを指していました。以前のバージョンのSplash(古いQT/WebKitインプレッションを使用)でレンダリングできなかったため、1つのスパイダーでSeleniumを使用しました。私は書きましたが、いつか成功することは時々ありませんでした。 Splashドッカーの画像が更新されたら、SeleniumからSplashに戻ってきてくれました。 –