0

私は現在scrapyに取り組んでいます、以下は私のspider.pyコードです

class ExampleSpider(BaseSpider):
    name = "example"
    allowed_domains = {"careers-preftherapy.icims.com"}


    start_urls = [
        "https://careers-preftherapy.icims.com/jobs/search"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        pageCount = hxs.select('//td[@class = "iCIMS_JobsTablePaging"]/table/tr/td[2]/text()').extract()[0].rstrip().lstrip()[-2:].strip()
        for i in range(1,int(pageCount)+1):
            yield Request("https://careers-preftherapy.icims.com/jobs/search?pr=%d"%i, callback=self.parsePage)

    def parsePage(self, response):
        hxs = HtmlXPathSelector(response)
        urls_list_odd_id = hxs.select('//table[@class="iCIMS_JobsTable"]/tr/td[@class="iCIMS_JobsTableOdd iCIMS_JobsTableField_1"]/a/@href').extract()
        print urls_list_odd_id,">>>>>>>odddddd>>>>>>>>>>>>>>>>"
        urls_list_even_id = hxs.select('//table[@class="iCIMS_JobsTable"]/tr/td[@class="iCIMS_JobsTableEven iCIMS_JobsTableField_1"]/a/@href').extract()
        print urls_list_odd_id,">>>>>>>Evennnn>>>>>>>>>>>>>>>>"
        urls_list = []
        urls_list.extend(urls_list_odd_id)
        urls_list.extend(urls_list_even_id)
        for i in urls_list:
            yield Request(i.encode('utf-8'), callback=self.parseJob)


    def parseJob(self, response):
        pass

ここでページを開いた後、私は次のようなページネーションを達成しています

https://careers-preftherapy.icims.com/jobs/search?pr=1
 https://careers-preftherapy.icims.com/jobs/search?pr=2

...........すぐ

私は各URLのリクエストを出しました(ここでは6ページあると仮定します)。scrapyが最初のURLに到達したとき、最初のURLからすべてのhrefタグを収集しようとし、 (https://careers-preftherapy.icims.com/jobs/search?pr=1) 2番目のURLに到達したときにすべてのhrefタグを収集します。

私のコードでは、各ページに合計20個のhrefタグがあり、10個のhrefタグがtd[@class="iCIMS_JobsTableOdd iCIMS_JobsTableField_1"] \の下にあり、残りは。の下にありtd[@class="iCIMS_JobsTableEven iCIMS_JobsTableField_1"]ます。

ここで問題となるのは、タグをダウンロードするときと、何が起こっているのかわからないときです。つまり、スパイダーファイルを2回実行するとダウンロードされ、別のときは以下のような空のリストが返されます。

初回実行:

2012-07-17 17:05:20+0530 [Preferredtherapy] DEBUG: Crawled (200) <GET https://careers-preftherapy.icims.com/jobs/search?pr=2> (referer: https://careers-preftherapy.icims.com/jobs/search)
[] >>>>>>>odddddd>>>>>>>>>>>>>>>>
[] >>>>>>>Evennnn>>>>>>>>>>>>>>>>

2回目の実行

2012-07-17 17:05:20+0530 [Preferredtherapy] DEBUG: Crawled (200) <GET https://careers-preftherapy.icims.com/jobs/search?pr=2> (referer: https://careers-preftherapy.icims.com/jobs/search)
[u'https://careers-preftherapy.icims.com/jobs/1836/job', u'https://careers-preftherapy.icims.com/jobs/1813/job', u'https://careers-preftherapy.icims.com/jobs/1763/job']>>>>>>>odddddd>>>>>>>>>>>>>>>>
[preftherapy.icims.com/jobs/1811/job', u'https://careers-preftherapy.icims.com/jobs/1787/job']>>>>>>>Evennnn>>>>>>>>>>>>>>>>

私の質問は、なぜダウンロードされているのか、ダウンロードされていないのかということです。本当に役に立ったと返信してください。

前もって感謝します.....

4

2 に答える 2

0

を使用open_in_browser()して、ブラウザーで応答を開くことができます。

def parsePage(self, response):
    from scrapy.utils.response import open_in_browser
    open_in_browser(response)
于 2012-07-24T16:03:32.940 に答える
0

ここで何が問題なのか、タグをダウンロードすることもあれば、何が起こっているのかわからないこともあります

何が起こっているのかを理解するには、デバッグする必要があります。私の推測では、予期しないページを取得したため、xpath クエリは空のリストを返していると思います。

次のようにします。

def parsePage(self, response):
    hxs = HtmlXPathSelector(response)
    urls_list_odd_id = hxs.select('//table[@class="iCIMS_JobsTable"]/tr/td[@class="iCIMS_JobsTableOdd iCIMS_JobsTableField_1"]/a/@href').extract()
    print urls_list_odd_id,">>>>>>>odddddd>>>>>>>>>>>>>>>>"
    urls_list_even_id = hxs.select('//table[@class="iCIMS_JobsTable"]/tr/td[@class="iCIMS_JobsTableEven iCIMS_JobsTableField_1"]/a/@href').extract()
    print urls_list_odd_id,">>>>>>>Evennnn>>>>>>>>>>>>>>>>"

    if not urls_list_odd_id or not urls_list_odd_id:
        from scrapy.shell import inspect_response
        inspect_response(response)

    urls_list = []
    urls_list.extend(urls_list_odd_id)
    urls_list.extend(urls_list_even_id)
    for i in urls_list:
        yield Request(i.encode('utf-8'), callback=self.parseJob)

ダウンロードしたページをブラウザー (Firefox など) で表示するシェル タイプview(response)に到達すると、xpath クエリをテストして、何も返さない理由を調べることができます。 ここでは、スクレイピー シェルの詳細について説明します。

于 2012-07-17T13:54:02.710 に答える