0

试图刮一个Y!组和我可以从一页获取数据,仅此而已。我有一些基本规则,但显然它们是不正确的。有人已经解决了这个问题吗?

class YgroupSpider(CrawlSpider):
name = "yahoo.com"
allowed_domains = ["launch.groups.yahoo.com"]
start_urls = [
    "http://launch.groups.yahoo.com/group/random_public_ygroup/post"
]

rules = (
    Rule(SgmlLinkExtractor(allow=('message','messages' ), deny=('mygroups', ))),
    Rule(SgmlLinkExtractor(), callback='parse_item'),
)


def parse_item(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('/html')
    item = Item()
    for site in sites:
        item = YgroupItem()
        item['title'] = site.select('//title').extract()
        item['pubDate'] = site.select('//abbr[@class="updated"]/text()').extract()
        item['desc'] = site.select("//div[contains(concat(' ',normalize-space(@class),' '),' entry-content ')]/text()").extract()
    return item
4

1 回答 1

0

看起来你几乎不知道自己在做什么。我对 Scrapy 还很陌生,但我认为你会想要 Rule(SgmlLinkExtractor(allow=('http\://example\.com/message/.*\.aspx', )), callback='parse_item'), 尝试编写一个匹配你想要的完整链接 URL 的正则表达式。此外,看起来您只需要一个规则。将回调添加到第一个。链接提取器匹配与 allow 中的正则表达式匹配的每个链接,并排除那些与 deny 匹配的链接,然后从那里加载每个剩余页面并将其传递给parse_item.

我说这一切,但并不真正了解您正在数据挖掘的页面以及您想要的数据的性质。您希望将这种蜘蛛用于具有指向具有您想要的数据的页面的链接的页面。

于 2011-03-27T01:57:34.413 回答