我正在使用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
帮助我将这个简单的定义转换为强大的通用蜘蛛,它可以抓取任何网站。感谢