Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通用蜘蛛,可以刮任何网站使用刮_Python_Python 2.7_Web Scraping_Scrapy_Scrapy Spider - Fatal编程技术网

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

Python 通用蜘蛛,可以刮任何网站使用刮,python,python-2.7,web-scraping,scrapy,scrapy-spider,Python,Python 2.7,Web Scraping,Scrapy,Scrapy Spider,我正在使用Scrapy从网站上刮取重要数据。我想写一个通用的爬行器定义,它可以从用户指定的任何网站上抓取数据。我曾尝试编写一些代码,但这还不足以实现我的目标。这段代码能够从一些HTML标记中提取数据,这些标记有时是不清楚的。这是spider的定义: from HTMLParser import HTMLParser class MLStripper(HTMLParser): def __init__(self): self.reset() self.fe

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

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

请帮助我将这个简单的定义转换为一个健壮的通用spider,它可以抓取任何网站。据我所知,这是不可能的,因为每个网站都有不同的源代码和xpath。他们可能正在使用可能需要selenium的ajax调用。@John Dene举例来说,有些网站的结构几乎相似。我能实现上述目标的一部分吗?是的,如果你说的是正确的,你可以在所有那些xpath内容完全相似的网站上部署你的spider。如果你能提到网站名称,我将能够告诉你结构是否相同not@JohnDene我要求的是几乎相似,而不是完全相似。我们能做到吗??