Grattage des données de facebook à l'aide de scrapy
Le nouveau graphe de recherche sur facebook vous permet de rechercher pour les employés actuels de l'entreprise à l'aide de la requête de jeton Actuelle, les employés de Google (par exemple).
Je veux gratter la page de résultats (http://www.facebook.com/search/104958162837/employees/present) par scrapy.
Problème Initial était de facebook ne permet qu'un facebook de l'utilisateur pour accéder à l'information, donc, m'intimant de login.php. Donc, avant de racler cette url, je me suis connecté via scrapy et puis, cette page de résultat. Mais même si la réponse http 200 pour cette page, il n'a pas de restes de toutes les données. Le code est comme suit:
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
Qu'aurais-je pu raté ou mal?
OriginalL'auteur Aryabhatt | 2013-05-31
Vous devez vous connecter pour publier un commentaire.
Le problème est que les résultats de la recherche (plus précisément div
initial_browse_result
) sont chargés dynamiquement via javascript. Scrapy reçoit la page avant de ces actions, alors il n'y a pas de résultats encore là.En gros, vous avez deux options ici:
essayer de simuler ces js (XHR) les demandes de scrapy, voir:
utiliser la combinaison de scrapy et le sélénium, ou scrapy et mécaniser à la charge de l'ensemble de la page avec le contenu, voir:
Si vous choisissez la première option, vous devez analyser toutes les demandes d'aller pendant le chargement de la page et de déterminer qui est responsable de l'obtention de données que vous souhaitez extraire.
La deuxième est assez simple, mais sera certainement le travail - il suffit d'utiliser un autre outil pour obtenir la page avec les chargés via js de données, puis de l'analyser pour scrapy éléments.
Espère que ça aide.
OriginalL'auteur alecxe