可以使用Scrapy刮掉任何网站的通用蜘蛛

时间:2015-08-26 08:18:24

标签: python python-2.7 web-scraping scrapy scrapy-spider

我正在使用Scrapy从网站上抓取重要数据。我想编写一个通用的蜘蛛定义,它可以从用户指定的任何网站中抓取数据。我曾尝试编写一些代码,但这还不足以实现我的目标。此代码只能从某些HTML标记中抓取数据,有时这些标记不清楚。这是蜘蛛定义:

from HTMLParser import HTMLParser

class MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.fed = []

    def handle_data(self, d):
        self.fed.append(d)

    def get_data(self):
        return ''.join(self.fed)


class StackItem(scrapy.Item):
    def __setitem__(self, key, value):
        if key not in self.fields:
            self.fields[key] = scrapy.Field()
        self._values[key] = value

class betaSpider1(CrawlSpider):
    name = "betaSpider1"

    def __init__(self, *args, **kwargs): 
        super(betaSpider1, self).__init__(*args, **kwargs) 
        self.start_urls = [kwargs.get('start_url')]

    def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        html_strip = MLStripper()
        item = StackItem()

        html_strip.feed(hxs.select("//a/@href").extract()[0])
        item['links'] = html_strip.get_data()

        html_strip.feed(hxs.select("//p").extract()[0])
        item['paragraph'] = html_strip.get_data()

        html_strip.feed(hxs.select("//div").extract()[0])
        item['div'] = html_strip.get_data()

        html_strip.feed(hxs.select("//span").extract()[0])
        item['span'] = html_strip.get_data()

        return item

帮助我将这个简单的定义转换为强大的通用蜘蛛,它可以抓取任何网站。感谢

0 个答案:

没有答案