如何获取给定网页中的所有出站链接并遵循它们?

时间:2014-11-28 18:15:04

标签: python web-scraping scrapy scrape

我有这段代码可以获取网页中的所有链接:

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的startinf 2)按照出站链接 3)只有在元数据中包含一些关键字时才刮取下一个网页 4)对给定量的循环重复整个过程 有人可以帮忙吗? 干杯!

达尼

1 个答案:

答案 0 :(得分:1)

我认为你可能正在寻找像scrapy的Rule和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):

这段代码是完全未经测试的,但只是给出了如何获取所有链接的想法,然后在完成解析之前检查关键字的后续页面。

祝你好运。