1

タイトルでお気づきかもしれませんが、scrapy と xpath を使用してデータを抽出しています。ファイルからスパイダーへのxpathを試して提供しました(スパイダーを汎用にするため-頻繁に編集しないため)必要に応じて、必要な形式でデータを抽出できます。

さらに、提供された xpath が有効かどうか (スパイダーで指定された Web ページに関連する) xpath 式をチェックしたいと思います (html スタイルが変更された場合、xpath は無効になります)。これに関して、スパイダーが起動する前に xpath 式を確認したいと思います。

xpath の正確性をテストするにはどうすればよいですか? または、真実のテストを行う方法はありますか? 助けてください。

class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = ["file:///<filepath>.html"]
def __init__(self):
    self.mt = ""
def parse(self, response):
    respDta = dict()
    it_lst = []
    dtData = response.selector.xpath(gx.spcPth[0])
    for ra in dtData:
        comoodityObj = ra.xpath(gx.spcPth[1])
        list = comoodityObj.extract()
        cmdNme = list[0].replace(u'\xa0', u' ')
        cmdNme = cmdNme.replace("Header text: ", '')
        self.populate_item(response, respDta, cmdNme, it_lst, list[0])
    respDta["mt"] = self.mt
    jsonString = json.dumps(respDta, default=lambda o: o.__dict__)
    return jsonString

gx.spcPthgx.spcPth は、xpath を提供する他の関数からのものです。そして、コードの残りの部分で多くの場合に使用されています。実装されている場所に関係なく、コード全体でスパイダーが開始する前に xpath 式を確認する必要があります

4

6 に答える 6

1

スパイダーに提供した xpath を Scrapy がどのように使用するかをテストするための最善の策は、Scrapy Shellを使用することです。

$ scrapy shell <url>

これにより、 selxpaths を実行できるオブジェクトが得られます。

>>> sel.xpath('//title/text()')

非常に簡単なテストが必要な場合は、"XPath Helper" Chrome 拡張機能をインストールしてください。これは、xpath を非常に迅速にテストして決定するための私のお気に入りの拡張機能です。

XPath ヘルパー

Chrome でサイトにアクセスし、Ctrl+Shift+X を押して xpath を入力するだけです。右側に結果が表示されます。

于 2014-12-09T13:34:34.817 に答える
0

あなたがやろうとしていることは理解できますが、理由がわかりません。スパイダーを実行するプロセス全体は、「テスト」プロセスと同時に行われます。xpath の結果が空で、何かが返される場合は、何かが間違っているというよりも単純です。xpath の結果を確認し、スクレイピー ロギングを使用して、必要に応じて警告、エラー、またはクリティカルとしてマークしてみませんか。このように簡単です:

from scrapy import log

somedata = response.xpath(my_supper_dupper_xpath)
# we know that this should have captured
# something, so we check
if not somedata:
    log.msg("This should never happen, XPath's are all wrong, OMG!", level=log.CRITICAL)
else:
    # do your actual parsing of the captured data, 
    # that we now know exists  

その後、スパイダーを実行してリラックスしてください。出力ログに重大なメッセージが表示されたら、ブリックを捨てる時が来たことがわかります。そうでなければ、すべて問題ありません。

于 2014-12-09T13:35:43.940 に答える
0

シェルは行く方法です。必要に応じて、ドキュメントに記載されているように、スパイダー内で呼び出すこともできます 。

于 2014-12-10T09:28:41.380 に答える