報連相が失敗するパターン「相手に何をして欲しいかを伝えられていない」
相手に何をして欲しいかを伝えられていない 報連相は失敗する
よく聞くのが「単なる事象・結果を述べている報連相」だ。
- 報告です、依頼されていた調査が終わりました
- 報告です、レビュー用の資料作りました
- 連絡です、共通モジュールのここを編集しました
- 相談です、レビューの指摘内容を理解できたかどうか怪しいです
報連相を受け取った側は何をしてよいのかわからない。
何をしてよいのか分からないから、報連相してきた側に問い詰める。
「それで、私は何をすればいい。それを言いに来ただけか」
この問い詰めが報連相の失敗だ。
相手に何をして欲しいかを添える
問い詰めをなくすには「相手に何をしてほしいか」を報連相に添えることだ。
- 報告です、依頼されていた調査が終わりました
- (加えて) 調査内容を明日の 16時までにレビューしてもらえますか
- 報告です、レビュー用の資料作りました
- (加えて) 資料内容に誤りがないか、今日の定時までにチェックお願いできますか
- 連絡です、共通モジュールのここを編集しました
- (加えて) 皆さんの編集モジュールには影響ないと思いますが、問題あれば教えてください
- 相談です、レビューの指摘内容を理解できたかどうか怪しいです
- (加えて) 14時ごろに口頭で質問させてもらってもよいですか
ビジネスで大事なこと
「相手に何をして欲しいかを伝えること」 である。
金をもらって仕事をする以上、職種が何であれあなたはビジネスマンだ。
ビジネスマンは仕事を前に進めなければいけない。
仕事を前に進めていると必ず、課題が出てくる。
課題を解決するために、自分以外のヒトに動いてもらわないといけない場合がある。
その時、あなたは明確に「ヒト = 相手に何をして欲しいか」を伝えられているだろうか。
「これよく分からないんですよね」「難しい課題に当たってしまって困っているんですよね」
では相手は動かない。
どうすればよいか考えよう。
ページネートのリソースを1ページずつ巡回し、ページにある各々のリンクへ 1 階層潜り込んでスクレイピングする
http://mat5ukawa.hateblo.jp/entry/2018/06/05/002826
より
- 各ページを巡回する
- 巡回ごとに各々のレコード詳細リンクへ 1 階層潜り込む
- 潜り込み先でスクレイピングする
クエリ抽出されたページのレコード探索に利用すれば良いと思う。
import scrapy class Spider(scrapy.Spider): start_urls = ['http://localhost:3000/seeds'] name = 'spider' def parse(self, response): # scrape resource's id id = response.xpath("//div[@id='page_num']/text()").extract_first() yield { 'id' : id } # scrape resource in each link for link in response.xpath("//table/tbody/tr/td[2]/a/@href").extract(): yield scrapy.Request(response.urljoin(link), callback = self._parse_link) # transit to next resource next_page = response.css('a[rel="next"]').xpath("@href").extract_first() if next_page is not None: next_page = response.urljoin(next_page) yield scrapy.Request(next_page, callback = self.parse) def _parse_link(self, response): detail = response.xpath("//p[@id='name']/text()").extract_first() yield { 'detail' : detail }
$ scrapy runspider crawler/main.py -o outfile.json
outfile.json
[ {"id": "page number is 1"}, {"detail": "e8b5202869b74aa1ffd0eadff7c3664f"}, {"detail": "8de50ac9ae0edd7b6d62a84af338186c"}, {"detail": "6f5a8295e6ccb687ceb9c4789f6e63f7"}, {"detail": "cb4e15e1100ae6aed7b2cfea3ce1842b"}, {"id": "page number is 2"}, {"detail": "0e89ba31a9592c3058fe87f5bef28e33"}, {"detail": "eed30fcd7d827f33127375ec44e7748f"}, {"detail": "18b84f501753059fab3cd3402703d2d9"}, {"detail": "dda2c6b55c0aedb84834f8a16aa9d024"}, ... ]
使ってはないが参考にしたページ
探索が二次元になるので、記載の仕組みを用いてより深層へスクレイピングする場合は計算量と相談。
scrapy ページネート形式のリソースをページ順々にスクレイピングする
レコード一覧をページネートで表現したリソースがあるとする。
ページ毎に固有メッセージ page number is {page number}
が存在するので、
全ページ分その取得を試みる。
リソースの想定図
- ページ毎に
page number is {page number}
が存在する - ページネートが設置されていて、番号をクリックすればそのページに遷移する
- 現在のページに対して「次のページ」を示す属性(ex.
rel="next"
) が存在する
探索方法(概念図)
単方向にリソースを探索する。探索が終わったら(= ページ終点にたどり着いたら)クロールを止める。
探索方法(ソース)
main.py
import scrapy class Spider(scrapy.Spider): start_urls = ['http://localhost:3000/seeds'] # ページネートリソースにアクセスできる URL を指す name = 'spider' def parse(self, response): for content in response.xpath("//div[@id='page_num']/text()").extract(): yield { 'content' : content } next_page = response.css('a[rel="next"]').xpath("@href").extract_first() if next_page is not None: next_page = response.urljoin(next_page) yield scrapy.Request(next_page, callback = self.parse)
$ scrapy runspider main.py -o outfile.json
outfile.json
[ {"content": "page number is 1"}, {"content": "page number is 2"}, {"content": "page number is 3"}, {"content": "page number is 4"}, {"content": "page number is 5"}, {"content": "page number is 6"}, {"content": "page number is 7"}, {"content": "page number is 8"}, {"content": "page number is 9"}, {"content": "page number is 10"} ]