Python 通用蜘蛛,可以刮任何网站使用刮
我正在使用Scrapy从网站上刮取重要数据。我想写一个通用的爬行器定义,它可以从用户指定的任何网站上抓取数据。我曾尝试编写一些代码,但这还不足以实现我的目标。这段代码能够从一些HTML标记中提取数据,这些标记有时是不清楚的。这是spider的定义: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
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我要求的是几乎相似,而不是完全相似。我们能做到吗??