11

したがって、Scrapy で認証されたセッションを使用してクロールを読みましたが、ハングアップしています。解析コードが正しいことは 99% 確信しています。ログインがリダイレクトされ、成功しているとは思えません。

また、チェックしているページがわからないcheck_login_response()に問題があります..「サインアウト」は理にかなっていますが。




====== 更新 ======

from scrapy.contrib.spiders.init import InitSpider
from scrapy.http import Request, FormRequest
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import Rule

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from linkedpy.items import LinkedPyItem

class LinkedPySpider(InitSpider):
    name = 'LinkedPy'
    allowed_domains = ['linkedin.com']
    login_page = 'https://www.linkedin.com/uas/login'
    start_urls = ["http://www.linkedin.com/csearch/results?type=companies&keywords=&pplSearchOrigin=GLHD&pageKey=member-home&search=Search#facets=pplSearchOrigin%3DFCTD%26keywords%3D%26search%3DSubmit%26facet_CS%3DC%26facet_I%3D80%26openFacets%3DJO%252CN%252CCS%252CNFR%252CF%252CCCR%252CI"]

    def init_request(self):
        #"""This function is called before crawling starts."""
        return Request(url=self.login_page, callback=self.login)

    def login(self, response):
        #"""Generate a login request."""
        return FormRequest.from_response(response,
                    formdata={'session_key': 'user@email.com', 'session_password': 'somepassword'},
                    callback=self.check_login_response)

    def check_login_response(self, response):
        #"""Check the response returned by a login request to see if we aresuccessfully logged in."""
        if "Sign Out" in response.body:
            self.log("\n\n\nSuccessfully logged in. Let's start crawling!\n\n\n")
            # Now the crawling can begin..

            return self.initialized() # ****THIS LINE FIXED THE LAST PROBLEM*****

        else:
            self.log("\n\n\nFailed, Bad times :(\n\n\n")
            # Something went wrong, we couldn't log in, so nothing happens.

    def parse(self, response):
        self.log("\n\n\n We got data! \n\n\n")
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//ol[@id=\'result-set\']/li')
        items = []
        for site in sites:
            item = LinkedPyItem()
            item['title'] = site.select('h2/a/text()').extract()
            item['link'] = site.select('h2/a/@href').extract()
            items.append(item)
        return items



この問題は、self.initialized() の前に「Return」を追加することで解決されました。

再度、感謝します!-マーク

4

1 に答える 1

4
class LinkedPySpider(BaseSpider):

次のようにする必要があります。

class LinkedPySpider(InitSpider):

parseまた、ここでの回答で述べたように、関数をオーバーライドしないでください: https://stackoverflow.com/a/5857202/crawling-with-an-authenticated-session-in-scrapy

リンクを抽出するためのルールを定義する方法がわからない場合は、ドキュメントを適切に読んでください:
http://readthedocs.org/docs/scrapy/en/latest/topics/spiders.html#scrapy.contrib. Spiders.Rule
http://readthedocs.org/docs/scrapy/en/latest/topics/link-extractors.html#topics-link-extractors

于 2012-06-08T18:22:12.880 に答える