2014-01-10 2 views
-1

Многие страницы поклонников Facebook теперь находятся в следующем формате: https://www.facebook.com/TiltedKiltEsplanade где «TiltedKiltEsplanade» - это пример имени, заявленного владельцем страницы. Тем не менее, RSS-канал той же страницы находится по адресу https://www.facebook.com/feeds/page.php?id=414117051979234&format=rss20, где 414117051979234 - это идентификатор, который можно определить, перейдя на страницу https: // . .facebook.com/TiltedKiltEsplanade и поиск последнего числового идентификатора, указанного на странице (есть два похожих идентификатора в верхней части страницы, но их можно игнорировать).Быстрое копирование числовых идентификаторов страниц фан-страниц Facebook

У меня есть длинный список фанатов Facebook в формате, описанном выше, и я хотел бы быстро получить числовые идентификаторы, соответствующие этим страницам, чтобы я мог добавить их все в RSS-ридер. Каким будет самый простой способ очистить эти страницы? Я знаком с Scrapy, но я не уверен, что его можно использовать, потому что графическая версия страницы не помечена таким образом, чтобы можно было легко очищать (насколько я могу судить)

Спасибо.

+0

'Что бы самый простой способ, чтобы очистить эти страницы' Возможно, с какой-то код? ! Я бы рекомендовал проверить это - http://stackoverflow.com/help/how-to-ask - и вернуться назад, если вы столкнетесь с более конкретными вопросами, после того, как вы провели какое-то исследование и начали его кодировать самостоятельно. – admdrew

+0

Я понимаю основы Python и использовал Scrapy раньше, чтобы очистить сайты, но я не уверен, что он может быть использован для этого проекта, учитывая разметку кода. Я должен был быть более конкретным в моем первоначальном вопросе. – zgall1

+0

Мне бы очень понравилось, если бы кто-то мог посмотреть URL-адрес, начинающийся с графика, и посмотреть, есть ли способ закодировать его в Scrapy. Мне не нужна кодировка, сделанная для меня. Я бы просто хотел, чтобы меня указали в правильном направлении. – zgall1

ответ

4

Выходной сигнал запроса графика является объектом JSON. Это намного проще в обработке, чем в HTML-контенте.

Это будет простая реализация того, что вы ищете:

# file: myspider.py 
import json 

from scrapy.http import Request 
from scrapy.spider import BaseSpider 


class MySpider(BaseSpider): 
    name = 'myspider' 
    start_urls = (
     # Add here more urls. Alternatively, make the start urls dynamic 
     # reading them from a file, db or an external url. 
     'https://www.facebook.com/TiltedKiltEsplanade', 
    ) 

    graph_url = 'https://graph.facebook.com/{name}' 
    feed_url = 'https://www.facebook.com/feeds/page.php?id={id}&format=rss20' 

    def start_requests(self): 
     for url in self.start_urls: 
      # This assumes there is no trailing slash 
      name = url.rpartition('/')[2] 
      yield Request(self.graph_url.format(name=name), self.parse_graph) 

    def parse_graph(self, response): 
     data = json.loads(response.body) 
     return Request(self.feed_url.format(id=data['id']), self.parse_feed) 

    def parse_feed(self, response): 
     # You can use the xml spider, xml selector or the feedparser module 
     # to extract information from the feed. 
     self.log('Got feed: %s' % response.body[:100]) 

Выход:

$ scrapy runspider myspider.py 
2014-01-11 02:19:48-0400 [scrapy] INFO: Scrapy 0.21.0-97-g21a8a94 started (bot: scrapybot) 
2014-01-11 02:19:48-0400 [scrapy] DEBUG: Optional features available: ssl, http11, boto, django 
2014-01-11 02:19:48-0400 [scrapy] DEBUG: Overridden settings: {} 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Enabled item pipelines: 
2014-01-11 02:19:49-0400 [myspider] INFO: Spider opened 
2014-01-11 02:19:49-0400 [myspider] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2014-01-11 02:19:49-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2014-01-11 02:19:49-0400 [myspider] DEBUG: Crawled (200) <GET https://graph.facebook.com/TiltedKiltEsplanade> (referer: None) 
2014-01-11 02:19:50-0400 [myspider] DEBUG: Crawled (200) <GET https://www.facebook.com/feeds/page.php?id=414117051979234&format=rss20> (referer: https://graph.facebook.com/TiltedKiltEsplanade) 
2014-01-11 02:19:50-0400 [myspider] DEBUG: Got feed: <?xml version="1.0" encoding="utf-8"?> 
    <rss version="2.0" 
      xmlns:media="http://search.yahoo.com 
2014-01-11 02:19:50-0400 [myspider] INFO: Closing spider (finished) 
2014-01-11 02:19:50-0400 [myspider] INFO: Dumping Scrapy stats: 
    {'downloader/request_bytes': 578, 
    'downloader/request_count': 2, 
    'downloader/request_method_count/GET': 2, 
    'downloader/response_bytes': 6669, 
    'downloader/response_count': 2, 
    'downloader/response_status_count/200': 2, 
    'finish_reason': 'finished', 
    'finish_time': datetime.datetime(2014, 1, 11, 6, 19, 50, 849162), 
    'log_count/DEBUG': 9, 
    'log_count/INFO': 3, 
    'request_depth_max': 1, 
    'response_received_count': 2, 
    'scheduler/dequeued': 2, 
    'scheduler/dequeued/memory': 2, 
    'scheduler/enqueued': 2, 
    'scheduler/enqueued/memory': 2, 
    'start_time': datetime.datetime(2014, 1, 11, 6, 19, 49, 221361)} 
2014-01-11 02:19:50-0400 [myspider] INFO: Spider closed (finished) 
+0

Большое спасибо за вашу помощь. Я искренне благодарен за то, что вы на самом деле создали всю структуру кода для меня, поскольку я знаю, что мне понадобилось некоторое время, чтобы понять. Когда я пытаюсь вывести результаты в CSV, используя этот код - scraw crawl myspider -o FB.csv -t csv - результирующий файл пуст. Не могли бы вы помочь мне понять, что я делаю неправильно? – zgall1

+0

@ zgall1 Вы возвращаете объект Item? Я бы предложил создать новый вопрос, добавляя более подробную информацию о вашем коде паука, журналах вывода и т. Д. – Rolando

+0

Я просто запустил код, который вы предоставили. Теперь, когда я смотрю на него более тщательно, я вижу, что он не возвращает объект Item (например, код, который я создал ранее). Я посмотрю, смогу ли я изменить то, что вы сделали. Благодарю. – zgall1