5

Facebook の新しいグラフ検索では、クエリ トークンを使用して会社の現在の従業員を検索できます -現在の Google 従業員(たとえば)。

結果ページ ( http://www.facebook.com/search/104958162837/employees/present ) を Scrapy 経由でスクレイピングしたい。

最初の問題は、facebook が facebook ユーザーのみに情報へのアクセスを許可していたため、login.php に誘導することでした。したがって、この URL をスクレイピングする前に、scrapy を介してログインし、次にこの結果ページにログインしました。しかし、このページの http 応答は 200 ですが、データは廃棄されません。コードは次のとおりです。

import sys
from scrapy.spider import BaseSpider
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.http import Request

class DmozSpider(BaseSpider):
    name = "test"
    start_urls = ['https://www.facebook.com/login.php'];
    task_urls = [query]

def parse(self, response):
return [FormRequest.from_response(response, formname='login_form',formdata={'email':'myemailid','pass':'myfbpassword'}, callback=self.after_login)]

def after_login(self,response):
    if "authentication failed" in response.body:
            self.log("Login failed",level=log.ERROR)
            return
    return Request(query, callback=self.page_parse)

def page_parse(self,response):

    hxs = HtmlXPathSelector(response)
    print hxs
    items = hxs.select('//div[@class="_4_yl"]')
    count = 0
    print items

何を見逃した、または間違って実行した可能性がありますか?

4

1 に答える 1

10

問題は、検索結果 (具体的には div initial_browse_result) が JavaScript を介して動的にロードされることです。Scrapy はこれらのアクションの前にページを受け取るため、まだ結果はありません。

基本的に、ここには 2 つのオプションがあります。

最初のオプションを使用する場合は、ページの読み込み中に発生するすべてのリクエストを分析し、スクレイピングするデータの取得に関与するリクエストを特定する必要があります。

2 つ目は非常に簡単ですが、間違いなく機能します。他のツールを使用して、js データを介してロードされたページを取得し、それを解析してスクレイピー アイテムにするだけです。

それが役立つことを願っています。

于 2013-05-31T20:13:13.750 に答える