0

私は4日間抱えているこの問題で行き詰まりを迎えています。「 http://www.ledcor.com/careers/search-careers 」をクロールしたい。各求人情報ページ (例: http://www.ledcor.com/careers/search-careers?page=2 ) で、各求人リンクの中に入り、役職を取得します。私はこれまでのところこれを機能させています。

今、私はスパイダーを次の求人ページに移動させようとしています (ig http://www.ledcor.com/careers/search-careers?page=2 からhttp://www.ledcor.com/careers/) search-careers?page=3およびすべての求人をクロールします)。クロール ルールが機能せず、何が問題で何が不足しているのかわかりません。助けてください。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem

class LedcorSpider(CrawlSpider):
    name = "ledcor"
    allowed_domains = ["www.ledcor.com"]
    start_urls = ["http://www.ledcor.com/careers/search-careers"]


    rules = [
        Rule(SgmlLinkExtractor(allow=("http://www.ledcor.com/careers/search-careers\?page=\d",),restrict_xpaths=('//div[@class="pager"]/a',)), follow=True),
        Rule(SgmlLinkExtractor(allow=("http://www.ledcor.com/job\?(.*)",)),callback="parse_items")
    ]

def parse_items(self, response):
    hxs = HtmlXPathSelector(response)
    item = CraigslistSampleItem()
    item['title'] = hxs.select('//h1/text()').extract()[0].encode('utf-8')
    item['link'] = response.url
    return item

ここにItems.pyがあります

from scrapy.item import Item, Field

class CraigslistSampleItem(Item):
    title = Field()
    link = Field()
    desc = Field()

ここに Pipelines.py があります

class CraigslistSamplePipeline(object):
    def process_item(self, item, spider):
        return item

更新:(@blenderの提案)クロールしません

rules = [
    Rule(SgmlLinkExtractor(allow=(r"http://www.ledcor.com/careers/search-careers\?page=\d",),restrict_xpaths=('//div[@class="pager"]/a',)), follow=True),
    Rule(SgmlLinkExtractor(allow=("http://www.ledcor.com/job\?(.*)",)),callback="parse_items")
]
4

3 に答える 3

1

疑問符をエスケープし、正規表現に生の文字列を使用する必要があります。

r"http://www\.ledcor\.com/careers/search-careers\?page=\d"

...careerspage=2それ以外の場合は、や などの URL を探します...carrerpage=3

于 2013-09-30T03:39:28.863 に答える
0

これを試して:

rules = [Rule(SgmlLinkExtractor(), follow=True, callback="parse_items")]

また、適切な変更を行い、pipeline.pyパイプラインと項目コードを貼り付ける必要があります。

于 2013-09-30T06:28:02.547 に答える