通用蜘蛛,可以刮任何网站使用刮痧

2024-09-28 19:02:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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

帮我把这个简单的定义转换成一个健壮的通用蜘蛛,它可以抓取任何网站。谢谢


Tags: 数据keyselfdataget网站defhtml