2014-11-28 2 views
0

У меня есть этот код, который получает все ссылки на веб-странице:Как получить все исходящие ссылки на данной веб-странице и следовать им?

from scrapy.spider import Spider 
from scrapy import Selector 
from socialmedia.items import SocialMediaItem 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 

class MySpider(Spider): 
    name = 'smm' 
    allowed_domains = ['*'] 
    start_urls = ['http://en.wikipedia.org/wiki/Social_media'] 
    def parse(self, response): 
     items = [] 
     for link in response.xpath("//a"): 
      item = SocialMediaItem() 
      item['SourceTitle'] = link.xpath('/html/head/title').extract() 
      item['TargetTitle'] = link.xpath('text()').extract() 
      item['link'] = link.xpath('@href').extract() 
      items.append(item) 
     return items 

Я хотел бы сделать следующее: 1) Вместо того, чтобы получить все ссылки, чтобы получить только исходящие из них или, по крайней по крайней мере, только те, которые начинаются с http/s 2) Следуйте за исходящими ссылками 3) Очистите следующую веб-страницу, только если она содержит некоторые ключевые слова в метаданных 4) Повторите весь процесс для заданного количества циклов Может ли кто-нибудь помочь? Приветствия!

Дани

+0

Благодарим вас за то, что вы задали отдельный вопрос, вместо того, чтобы пытаться решить отдельную проблему в комментариях к ответу на другую проблему. – alecxe

+0

Добро пожаловать? Вы можете помочь? –

ответ

1

Я думаю, что вы, вероятно, ищете что-то вроде Правила Scrapy и LinkExtractor.

from scrapy.contrib.spiders import Rule 
from scrapy.contrib.linkextractors import LinkExtractor 
class MySpider(Spider): 
    name = 'smm' 
    allowed_domains = ['*'] 
    start_urls = ['http://en.wikipedia.org/wiki/Social_media'] 
    rules = (
     Rule(LinkExtractor(restrict_paths=('//a[contains(., "http")]'), callback='pre_parse') 
    ) 

def pre_parse(self, response): 
    if keyword in response.body: 
     parse(response) 

def parse(self, response): 

Этого код полностью тестировался, но просто дать иду о том, как вы могли бы идти о получении всех ссылок, а затем проверять Последующие страницы для ключевых слов, прежде чем делать полный синтаксический анализ.

Удачи.